Guava ImmutableSet:Builder vs. of?

Guava ImmutableSet: Builder vs. of?

com.google.common.collect.ImmutableSetJavadoc 表明有两种方法可以从 E 类型的元素(例如 E e1E e2) 尚未在集合中(即忽略从现有集合创建的 copyOf 方法):

  1. "of"方法:

    ImmutableSet<E> set = ImmutableSet.of(e1, e2);
    
  2. 建设者:

    ImmutableSet<E> set = new ImmutableSet.Builder<E>().add(e1).add(e2).build();
    

这两种方法最终都使用了ImmutableSet.Builder#construct,但是我更喜欢哪一种?

这完全取决于您将如何构建 ImmutableSet。如果您在一处拥有所有可用元素,则直接使用 of(E...) 方法。那肯定会更短。

但是,如果您以某种方式从不同的地方获取元素,这意味着您的对象状态不是在一个地方完成的,而是在流中累积数据之后完成的。那么你将不得不采用 Builder 方式。创建一个 Builder,并在获得时继续添加元素。完成后,只需调用 build() 即可获得 ImmutableSet.