java - 在没有静态嵌套类的情况下按需初始化多个静态变量?

标签 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来做到这一点,但是如果您有很多字段,这会很麻烦。

还有别的办法吗?

最佳答案

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

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

如果您想要的是 public final static 字段,那么在 Java 中无法实现它们的单独初始化。所有类成员都一起初始化。

关于java - 在没有静态嵌套类的情况下按需初始化多个静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574778/

相关文章:

java - 编译错误-无法访问的语句

c# - 在 C# 中编写延迟加载属性的简洁方法

c# - Entity Framework 延迟加载的私有(private)支持字段

reactjs - React 延迟加载的组件丢失其状态(卸载)

java - Android Jackson 映射异常

java - Tomcat JDBC 连接池 - 连接卡在 Activity 状态

java - 如何 "logic:iterate"只是一个对象?

lambda - 使用 JDK8 和 lambda 压缩流 (java.util.stream.Streams.zip)

matlab - 函数句柄内的逻辑短路

Haskell CIS194 Spring 13 作业 6 练习 5