这是在构建器对象中创建空集的最佳方法

时间:2019-02-16 15:25:23

标签: java collections immutable-collections immutables-library

一个类具有一组String对象作为其实例变量。

步骤1:我有一个方法可以为此类创建一个对象,为实例变量分配空的String集,然后返回该对象。

接收它的方法,将其传递给另一个方法,该方法向该空集合添加更多String。

现在我应该如何在步骤1中创建空集?

a。使用Collections.<String>emptyList()会创建一个不可变的字符串集,当稍后在第二种方法中添加新的字符串时,这不会产生错误。需要一些有关如何发生这种情况的基本信息。

b。 new HashSet<>()这将创建一个可变的地图。

哪种方法正确,为什么?还有另一种好方法吗?

1 个答案:

答案 0 :(得分:3)

从您的问题听起来,好像是通过生成器生成实例,然后有人尝试修改生成的实例。

不要那样写;建造者实际上应该总是返回不可变的东西。如果在构建过程中没有任何元素添加到集合中,则为Set.of()(或者,在JDK9之前的API中为Collections.emptySet())。当您尝试将它们添加到它们时,这些将抛出。

如果您打算通过创建器或否创建可变对象,则显然需要一些可变集。可能是HashSet,但请注意,HashSet通常对于构建器而言是个坏主意;通常期望保持顺序,因此您需要使用LinkedHashSet,或者最好使用更优化的番石榴ImmutableSet之类的东西。

相关问题