java - Initialization On Demand Holder 成语

标签 java c++ static singleton lazy-initialization

这是网络上最常见的实现方式

private static class LazySomethingHolder {
  public static Something something = new Something();
}

public static Something getInstance() {
  return LazySomethingHolder.something;
}

以下更简单的变体是否正确,如果不正确,它有什么问题?该问题是 Java 特有的还是 C++ 中也存在?

public static Something getInstance() {
  private static Something something = new Something();
  return something;
}

最佳答案

Java 中不能有静态局部变量。

更简单的选择是

private static final Something something = new Something();

public static Something getInstance() {
  return something;
}

或者我的偏好。

enum Something {
    INSTANCE;
}

这些模式的唯一问题是,如果您有多个要延迟加载的实例,则每个实例都需要有一个类,否则加载一个就意味着加载所有实例。

关于java - Initialization On Demand Holder 成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35551393/

相关文章:

c++ - 使用 libcurl 和 ntml 时出现 http 407 错误

Java:变量不递增

unity-game-engine - Unity保存foreach?

java - 信号 6 (SIGABRT)

java - Eclipse ADT 自动为 Activity 创建 fragment 。为什么?

c++ - 段错误,列出目录的内容

c++ - static int 执行了多少次?

java - Apache http 发布示例

java - 如何使用 firebase 实时数据库的字符串列表进行查询

c++ - 用 C++ 中的文件指针替换 stdout 和 stdin?