代码之家  ›  专栏  ›  技术社区  ›  Jay R.

在Java中调用CysRekDistList()是什么?

  •  12
  • Jay R.  · 技术社区  · 15 年前

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

    我有一些代码,我知道它会给我一个 List<String> 但它正在通过一系列消息传递呼叫,并作为 java.io.Serializable . 那个检查表电话能帮我转一下吗 Serializable 变成一个 列表<字符串> ?我知道我可以把它投射到 java.util.List 但是我不想检查每个元素,我不愿意假设每个元素是 String .

    3 回复  |  直到 9 年前
        1
  •  16
  •   Yishai    15 年前

    它在一定程度上用作调试工具,用于查找代码在何处插入错误类型的类,以防您看到这种情况发生,但无法确定在何处插入。

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

    在您的案例中使用它的方法是:

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

    如果这没有引发异常,那么你就知道你很好。这并不完全是一段性能优化的代码,但是如果列表内容相当小的话,就可以了。

        2
  •  15
  •   daveb    15 年前

    不完全:

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

    但是,您可以创建一个新的检查列表,然后调用 addAll 把你不确定的列表传给你,而不是自己写循环。

        3
  •  9
  •   approxiblue Ben Jackson    9 年前

    关于什么的讨论 checkedList 可用于可在文档中找到 checkedCollection . 原因如下:

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

    您可以使用以下来自 google collections 要检查列表是否只包含字符串:

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