如何在Java Singleton枚举构造函数中调用方法?

时间:2018-11-15 04:05:11

标签: java enums constructor singleton

我的示例枚举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。

这表明在构造函数完成执行之前,不会初始化静态字段。

问题:如何实现在构造函数内调用访问静态字段的方法的功能?

1 个答案:

答案 0 :(得分:2)

这是因为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);
    }