【发布时间】:2019-04-18 03:10:05
【问题描述】:
我的示例枚举 Singleton 类是:
public class Test{
public enum MyClass{
INSTANCE;
private static String name = "Hello";
MyClass() {
test();
}
private static void test(){
name = name + "World";
System.out.println(name);
}
}
public static void main(String a[]){
MyClass m1 = MyClass.INSTANCE;
}
}
获得的输出:nullWorld
预期输出:HelloWorld
在main()中,如果
MyClass m1 = MyClass.INSTANCE;
被替换为
MyClass.INSTANCE.test();
那么,正如预期的那样,输出是 HelloWorld。
这表明静态字段在构造函数完成执行之前不会被初始化。
问题:如何实现在构造函数中调用访问静态字段的方法的功能?
【问题讨论】:
-
@AadhiraiR 单例的全部意义在于拥有一个可以保持状态的单个实例 - 为什么在单例中需要一个静态变量?只需将其设为实例变量即可。
-
@Hulk,真的!我意识到了这一点,并且正在删除枚举单例类中的所有静态字段。
标签: java enums constructor singleton