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

Jay*_* R. 12 java generics collections

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

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

Yis*_*hai 16

它部分用作调试工具,用于查找代码插入错误类型的类型,以防您看到发生的情况,但无法确定哪里.

您可以将它用作提供集合的公共API的一部分,并且您希望确保集合不会在其中获取错误类型的任何内容(例如,如果客户端删除了泛型).

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

 Collections.checkedList(
      new ArrayList<String>(uncertainList.size()), String.class)
      .addAll(uncertainList);
Run Code Online (Sandbox Code Playgroud)

如果这不会引发异常,那么你就知道你很好.这不是一个性能优化的代码片段,但如果列表内容相当小,它应该没问题.


dav*_*veb 15

不完全的:

Collections.checkedList 只会修饰列表以防止将来插入错误类的对象,它不会检查列表中已有的所有元素.

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


Ben*_*ngs 9

checkedList可以在checkedCollection的文档中讨论可以使用的内容.给出的理由是:

  • 作为调试辅助工具(如果有人使用了未经检查的演员表)
  • 在传递要由第三方代码填充的集合时确保安全性.

您可以使用google集合中的以下内容来检查列表是否只包含字符串:

Iterables.all(list, Predicates.instanceOf(String.class))
Run Code Online (Sandbox Code Playgroud)