在java中调用Collections.checkedList()是什么?
我只想知道实际使用java.util.Collections.checkedList()
内容。
我有一些代码,我知道它返回一个List
但它正在通过一连串的消息传递调用并作为java.io.Serializable
返回给我。 这个checkedList调用是否适合我将Serializable
转换为List
? 我知道我可以将它转换为java.util.List
,但我不必检查每个元素,并且我不习惯假设每个元素都是一个String
。
它部分用作调试工具,用于查找代码插入错误类型的类型,以防您看到发生的情况,但无法确定哪里。
您可以将它用作提供集合的公共API的一部分,并且您希望确保集合不会在其中获取错误类型的任何内容(例如,如果客户端删除了generics)。
你可以在你的情况下使用它的方式是:
Collections.checkedList( new ArrayList(uncertainList.size()), String.class) .addAll(uncertainList);
如果这不会引发exception,那么你就知道你很好。 这不是一个性能优化的代码片段,但如果列表内容相当小,那应该没问题。
不完全的:
Collections.checkedList
将仅装饰列表以防止将来使用错误类的对象进行插入,它不会检查列表中已有的所有元素。
但是,您可以创建一个新的checkedList,然后调用addAll
并传入您不确定的列表 – 而不是自己编写循环。
有关checkedList
可以用于什么的讨论可以在checkedCollection的文档中找到 。 给出的理由是:
- 作为调试辅助工具(如果有人使用了未经检查的演员表)
- 在传递要由第三方代码填充的集合时确保安全性。
您可以使用google集合中的以下内容来检查列表是否只包含字符串:
Iterables.all(list, Predicates.instanceOf(String.class))