在java中调用Collections.checkedList()是什么?

时间:2009-07-21 19:17:42

标签: java generics collections

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

我有一些代码,我知道它会给我一个List<String>但它正在通过一连串的消息传递调用并以java.io.Serializable的形式返回给我。 checkList调用是否适合我将Serializable转换为List<String>?我知道我可以将其转换为java.util.List,但我不必检查每个元素,并且我不习惯假设每个元素都是String

3 个答案:

答案 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))