我刚刚注意到 ImmutableList.of(E[]) ImmutableList.copyOf()弃用了,这很明显的原因是,如果在其他地方使用原始数组,则不能真正使列表不可变。

如果您有一个返回数组的方法,并且知道该方法不保留对数组的引用,并且除了将其传递给ImmutableList.of()之外,您的代码也不保留对数组的引用,该怎么办? ?

我是不是该...

  • 继续使用ImmutableList.of(E[])(由于方法将消失,似乎是个坏主意)
  • 使用Collections.unmodifiableList(Arrays.asList())
  • 使用ImmutableList.copyOf()-这似乎是最好的主意,其中不会出现性能/资源问题,否则就无需复制。
  • 最佳答案

    ImmutableList.of(E[])不会,也永远不会存储直接给定的数组(如果这样做,它不会是不变的,这会破坏类的要点)。由于命名原因,它已被弃用。如果看一下实现,它是:

    public static <E> ImmutableList<E> of(E[] elements) {
      return copyOf(elements);
    }
    

    所以我的建议是一般只使用ImmutableList.copyOf()。如果您知道只是包装一个数组供内部使用或类似用途,请随时保存自己的副本,并仅使用Arrays.asList,但我更喜欢API的ImmutableList

    10-04 13:59