【问题标题】:What is the Collections.checkedList() call for in java?java 中的 Collections.checkedList() 调用是什么?
【发布时间】:2010-11-12 18:26:45
【问题描述】:

我只想知道java.util.Collections.checkedList() 的实际用途。

我知道一些代码返回给我List<String>,但它通过一系列消息调用传递并作为java.io.Serializable 返回给我。那个checkedList调用对我把我的Serializable变成List<String>有好处吗?我知道我可以将其转换为 java.util.List,但我宁愿不必检查每个元素,而且我不习惯假设每个元素都是 String

【问题讨论】:

    标签: java generics collections


    【解决方案1】:

    不完全是:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        【解决方案3】:

        checkedCollection 的文档中讨论了 checkedList 的用途。给出的理由是:

        • 作为调试辅助(如果有人使用了未经检查的强制转换)
        • 在传递要由第三方代码填充的集合时确保安全。

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

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

        【讨论】:

        • 谢谢。我错过了。 IDE 破坏了我的 javadoc 阅读。
        猜你喜欢
        • 2014-09-16
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        相关资源
        最近更新 更多