2009-07-21 55 views
9

我只想知道java.util.Collections.checkedList()实际使用的是什么。什么是java中的Collections.checkedList()调用?

我有一些代码,我知道返回给我一个List<String>,但它正在通过一系列的消息传递调用并作为java.io.Serializable返回给我。那checkedList对我来说是好的把我的Serializable变成List<String>?我知道我可以将它投射到java.util.List,但我宁愿不必检查每个元素,并且假设每个元素都是String,我不太自在。

回答

16

据部分用作调试工具寻找到代码中插入一个类错误的类型,如果你看到发生的事情,但不能揣摩出。

你可以使用它作为提供一个集公共API的一部分,并且要确保集合不会得到任何东西错误的类型(例如,如果客户端删除的仿制药)。

,你可以在你的情况下,使用它的方式是:

Collections.checkedList(
     new ArrayList<String>(uncertainList.size()), String.class) 
     .addAll(uncertainList); 

如果没有抛出异常,那么你知道你是好人。这不完全是性能优化的一段代码,但如果列表内容相当小,应该没问题。

+0

好的解决方法! – 2009-07-21 19:30:15

14

不太:

Collections.checkedList只会装饰名单,以防止任何将来的插入与错误的类的对象,它不会检查所有已经在列表中的元素。

但是,您可以创建一个新的checkedList,然后调用addAll并通过您不确定的列表 - 而不是自己编写循环。

9

关于checkedList可用于什么的讨论可在checkedCollection的文档中找到。给出的理由是:

  • 辅助调试(如果有人使用了未经检查的CAST)
  • 传递一个集合时通过第三方代码来填充,以确保安全。

您可以使用下面从google collections检查,列表中只包含字符串:

Iterables.all(list, Predicates.instanceOf(String.class)) 
+0

谢谢。我错过了。 IDE正在破坏我的javadoc阅读。 – 2009-07-21 19:34:52