没有静态嵌套类的多个静态变量的需求初始化?

时间:2014-10-26 15:43:25

标签: java lazy-loading lazy-evaluation lazy-initialization static-initialization

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

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执行此操作,但如果您有很多字段,这很麻烦。

还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

延迟初始化的最常用方法是在getter方法中初始化:

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

如果您想要完全public final static个字段,那么就无法在Java中为它们实现单独的初始化。所有班级成员一起初始化。