一个类具有一组String对象作为其实例变量。
步骤1:我有一个方法可以为此类创建一个对象,为实例变量分配空的String集,然后返回该对象。
接收它的方法,将其传递给另一个方法,该方法向该空集合添加更多String。
现在我应该如何在步骤1中创建空集?
a。使用Collections.<String>emptyList()
会创建一个不可变的字符串集,当稍后在第二种方法中添加新的字符串时,这不会产生错误。需要一些有关如何发生这种情况的基本信息。
b。 new HashSet<>()
这将创建一个可变的地图。
哪种方法正确,为什么?还有另一种好方法吗?
答案 0 :(得分:3)
从您的问题听起来,好像是通过生成器生成实例,然后有人尝试修改生成的实例。
不要那样写;建造者实际上应该总是返回不可变的东西。如果在构建过程中没有任何元素添加到集合中,则为Set.of()
(或者,在JDK9之前的API中为Collections.emptySet()
)。当您尝试将它们添加到它们时,这些将抛出。
如果您打算通过创建器或否创建可变对象,则显然需要一些可变集。可能是HashSet,但请注意,HashSet通常对于构建器而言是个坏主意;通常期望保持顺序,因此您需要使用LinkedHashSet
,或者最好使用更优化的番石榴ImmutableSet
之类的东西。