java - TreeSet 如何作为成员变量在 Enum Singleton 中处理

标签 java enums arraylist singleton

这可能是一个愚蠢的问题,但却让我陷入困境。

我在 Java 中使用枚举实现了一个单例类(我知道它们是邪恶的)

public enum Edit {

   INSTANCE;

   private TreeSet<String> list1 = new TreeSet<String>();

   public void createList(Scanner input) {
        while (input.hasNext()) {
            list1.add(input.next());
        }

我的问题是,当您在应用程序的多个位置使用 createList 方法时,TreeSet 会发生什么情况?

例如,在应用程序中第一次调用 Edit.INSTANCE.createList() 时,将 10 个字符串添加到 list1,现在第二次调用时,将 5 个字符串添加到 list1 ....将那些新的将 5 个字符串与之前的 10 个字符串一起添加到 TreeSet 中,还是将它们添加到一个完全不同的(新的)TreeSet 中?

我知道单例类的目的是确保该类只有一个全局实例,但这是否适用于类成员变量?上面的例子中是只有一份list1还是每次调用createList()方法都创建了一个新的TreeSet?

最佳答案

只有一个 Edit 的实例类型,所以只有一个 TreeSet<String> .

每次调用createList ,它将为相同的 TreeSet 添加更多值.

你说:

I know the purpose of a singleton class is to make sure that there is one and only one global instance of the class but does that hold true for the class member variables?

如果它不适用于成员变量,那还有什么意义呢?这就是单个实例的有趣之处 - 它有自己的状态。

一般来说,让枚举可变是一个非常糟糕的主意 - 通常它们意味着表示特定的,可能具有行为。同样,我很少有可变单例 - 它引入了线程问题等,因为你自然有共享状态。

关于java - TreeSet 如何作为成员变量在 Enum Singleton 中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900006/

相关文章:

Java - 带条件的对象循环?

java - 任务在 Spark 中不可序列化

java - 意外类型所需变量发现值

java: NoSuchElementException: 读取 arrayList

MySQL 5 星评级数据类型?

java - 从 ArrayList 中删除偶数

java - 子报表的详细信息带未显示

java - Java 8 计算两个日期之间的天数

java - Jackson 枚举反序列化

java - 使用枚举来保存对象常量