这可能是一个愚蠢的问题,但却让我陷入困境。
我在 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/