我想有一个带有多个静态变量的类,这些类只能按需初始化。

public class Messages {
    public static final String message1 = init1();
    public static final String message2 = init2();
}


因此,当我在代码中的某处引用Messages.message1时,只希望调用init1()。如果以后我访问Messages.message2,则仅应在那时调用init2()

我知道可以使用Initialization-on-demand holder idiom来做到这一点,但是如果您有很多字段,这将很麻烦。

还有另一种方法吗?

最佳答案

延迟初始化的最常见方法是getter方法的初始化:

public class Messages {
    private static String message1;
    public static String getMessage1() {
        if (message1 == null)
            message1 = init1();
        return message1;
    }
}


如果您只需要public final static字段,则无法在Java中对其进行单独的初始化。所有类成员都一起初始化。

07-27 18:13