在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))