guava: ImmutableList.of(E[])的最佳实践



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

最新更新