0

一个类有一组定义为其实例变量的 String 对象。

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

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

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

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

湾。new HashSet<>()这将创建一个可变映射。

哪种方法是正确的,为什么?有没有别的好办法?

4

1 回答 1

4

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

不要那样写;构建器实际上应该总是返回不可变的。如果在构建过程中没有元素被添加到集合中,那么Set.of()它是(或者,在 JDK9 之前的 API 中,Collections.emptySet())。当您尝试添加它们时,它们会抛出,这就是重点。

如果您的意图是通过构建器或不通过构建器创建一个可变对象,那么显然需要一些可变集。可能是 HashSet,但请注意 HashSet 通常对构建者来说是个坏主意;一般的期望是维持秩序,所以你需要LinkedHashSet,或者,最好是像番石榴ImmutableSet这样更优化的东西。

于 2019-02-16T15:31:11.860 回答