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

时间:2011-07-21 14:21:29

标签: java collections guava

我只是注意到ImmutableList.of(E[])被弃用而不赞成ImmutableList.copyOf(),原因很明显,如果在其他地方使用原始数组,列表就无法真正变为不可变。

如果你有一个返回一个数组的方法,并且你知道该方法没有保留对数组的引用,并且你的代码不保留对数组的引用而不是传递它到ImmutableList.of()

我应该......

  • 继续使用ImmutableList.of(E[])(因为该方法会消失,这似乎是一个坏主意)
  • 使用Collections.unmodifiableList(Arrays.asList())
  • 使用ImmutableList.copyOf() - 这似乎是不出现性能/资源问题的最佳选择,否则副本是不必要的。

1 个答案:

答案 0 :(得分:18)

ImmutableList.of(E[])没有并且从未存储过它直接给出的数组(如果它确实存在则不会是不可变的,这会破坏类的重点)。它因命名原因而被弃用。如果你看看实现,它是:

public static <E> ImmutableList<E> of(E[] elements) {
  return copyOf(elements);
}

所以我的建议是一般只使用ImmutableList.copyOf()。如果您知道自己只是将数组包装为内部使用或某些内容,请随意保存副本并使用Arrays.asList,但我更喜欢ImmutableList用于API。