Aad*_*i R 5 java singleton enums constructor
我的示例枚举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;
}
}
Run Code Online (Sandbox Code Playgroud)
获得的输出:nullWorld
预期输出:HelloWorld
在main()中,if
MyClass m1 = MyClass.INSTANCE;
Run Code Online (Sandbox Code Playgroud)
被替换为
MyClass.INSTANCE.test();
Run Code Online (Sandbox Code Playgroud)
然后,输出是HelloWorld,正如预期的那样.
这表明在构造函数完成执行之前,不会初始化静态字段.
问题:如何实现在访问静态字段的构造函数中调用方法的这种功能?
这是因为INSTANCE它是在之前声明的name,所以它是在初始化之前创建和初始化的name。
这有效:
public enum MyClass{
INSTANCE;
private static final String name = "Hello";
MyClass() {
test();
}
private static void test(){
String name1 = name + "World";
System.out.println(name1);
}
Run Code Online (Sandbox Code Playgroud)