我刚刚注意到 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。
关于java - Guava :ImmutableList.of(E[]) 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777568/