有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我的示例enum 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) 个答案

  1. # 1 楼答案

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