Guava ImmutableSet:Builder vs. of?
Guava ImmutableSet: Builder vs. of?
com.google.common.collect.ImmutableSet
的 Javadoc 表明有两种方法可以从 E
类型的元素(例如 E e1
和 E e2
) 尚未在集合中(即忽略从现有集合创建的 copyOf
方法):
"of"方法:
ImmutableSet<E> set = ImmutableSet.of(e1, e2);
建设者:
ImmutableSet<E> set = new ImmutableSet.Builder<E>().add(e1).add(e2).build();
这两种方法最终都使用了ImmutableSet.Builder#construct
,但是我更喜欢哪一种?
这完全取决于您将如何构建 ImmutableSet
。如果您在一处拥有所有可用元素,则直接使用 of(E...)
方法。那肯定会更短。
但是,如果您以某种方式从不同的地方获取元素,这意味着您的对象状态不是在一个地方完成的,而是在流中累积数据之后完成的。那么你将不得不采用 Builder
方式。创建一个 Builder
,并在获得时继续添加元素。完成后,只需调用 build()
即可获得 ImmutableSet
.
com.google.common.collect.ImmutableSet
的 Javadoc 表明有两种方法可以从 E
类型的元素(例如 E e1
和 E e2
) 尚未在集合中(即忽略从现有集合创建的 copyOf
方法):
"of"方法:
ImmutableSet<E> set = ImmutableSet.of(e1, e2);
建设者:
ImmutableSet<E> set = new ImmutableSet.Builder<E>().add(e1).add(e2).build();
这两种方法最终都使用了ImmutableSet.Builder#construct
,但是我更喜欢哪一种?
这完全取决于您将如何构建 ImmutableSet
。如果您在一处拥有所有可用元素,则直接使用 of(E...)
方法。那肯定会更短。
但是,如果您以某种方式从不同的地方获取元素,这意味着您的对象状态不是在一个地方完成的,而是在流中累积数据之后完成的。那么你将不得不采用 Builder
方式。创建一个 Builder
,并在获得时继续添加元素。完成后,只需调用 build()
即可获得 ImmutableSet
.