这是主要在网上看到的实施
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;
}
答案 0 :(得分:1)
您不能在Java中拥有静态局部变量。
更简单的替代方案
private static final Something something = new Something();
public static Something getInstance() {
return something;
}
或我的偏好,如果是。
enum Something {
INSTANCE;
}
这些模式的唯一问题是,如果你想要延迟加载多个实例,你需要每个都有一个类,或者加载一个将意味着加载它们。
答案 1 :(得分:1)
Java(与c ++不同)没有本地静态变量,因此您所描述的内容根本不可能。在c ++中你最有可能写(称为meyer singleton):
public static Something& getInstance() {
static Something something{};
return something;
}