我只是注意到ImmutableList.of(E[])
被弃用而不赞成ImmutableList.copyOf()
,原因很明显,如果在其他地方使用原始数组,列表就无法真正变为不可变。
如果你有一个返回一个数组的方法,并且你知道该方法没有保留对数组的引用,并且你的代码不保留对数组的引用而不是传递它到ImmutableList.of()
?
我应该......
ImmutableList.of(E[])
(因为该方法会消失,这似乎是一个坏主意)Collections.unmodifiableList(Arrays.asList())
ImmutableList.copyOf()
- 这似乎是不出现性能/资源问题的最佳选择,否则副本是不必要的。答案 0 :(得分:18)
ImmutableList.of(E[])
没有并且从未存储过它直接给出的数组(如果它确实存在则不会是不可变的,这会破坏类的重点)。它因命名原因而被弃用。如果你看看实现,它是:
public static <E> ImmutableList<E> of(E[] elements) {
return copyOf(elements);
}
所以我的建议是一般只使用ImmutableList.copyOf()
。如果您知道自己只是将数组包装为内部使用或某些内容,请随意保存副本并使用Arrays.asList
,但我更喜欢ImmutableList
用于API。