我刚刚注意到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
,但我更喜欢ImmutableList
的API。