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

标签 java collections immutable-collections immutables-library

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

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

接收它的方法,将其传递给另一个方法,该方法将更多字符串添加到该空集中。

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

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

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

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

最佳答案

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

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

如果您的目的是创建一个可变对象,无论是否通过构建器,显然都需要一些可变集。可能是 HashSet,但请注意,对于构建者来说,HashSet 通常不是一个好主意;一般期望是维持顺序,因此您需要 LinkedHashSet 来代替,或者最好是像 guava 的 ImmutableSet 这样更优化的东西。

关于java - 这是在构建器对象中创建空集的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724610/

相关文章:

java - 构造特定的正则表达式

java - 在 HashMap 的数组列表中排序

c# - 如何在 C# 中将 ImmutableArray<DerivedClass> 转换为 ImmutableArray<BaseClass> ,反之亦然?

c# - 在 C# 中寻找可用的不可变 bool 数组

java - 如何在android中创建动画饼图?

java - Weblogic 8.1 到 Websphere 8.5 迁移

java - ORMLite 迭代 ForeignCollection 抛出异常

c# - 为什么 ImmutableList 的 add 方法复杂度为 O(logN)?

Java => ActiveX 组件 = 无交互的 Swing

ruby-on-rails - RoR - collection_select 从数组