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