我刚刚注意到 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
。