1

我想要一个包含多个静态变量的类,它们只会根据需要进行初始化。根据需要初始化多个不带静态嵌套类的静态变量?

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

与您链接的内容类似,不是引用某个字段,而是调用一个方法。该方法将返回(并缓存)初始化值。 – 2014-10-26 15:46:00

+0

枚举单例可能有帮助吗? – SMA 2014-10-26 15:49:40

回答

2

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

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

如果你想要的是public final static场那么有没有办法实现在Java中为它们单独初始化。所有班级成员都一起初始化。