private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) {
synchronized(this) {
result = field;
if (result == null)
field = result = computeFieldValue();
}
}
return result;
}
我们几乎都知道这是double check idiom for lazy initialization of instance field
的示例代码。但我在这里有一个愚蠢的怀疑,有人会如何创建FieldType的单例对象。至于调用函数getField()
(创建单例实例),你需要一个类的实例,但到目前为止你还没有实例。我有点困惑,请让我知道。感谢!!!
答案 0 :(得分:1)
源代码中最简单的单例是枚举
enum Singleton {
INSTANCE;
}
但在这个更复杂的案例中,
有人将如何创建FieldType的单例对象。
他们必须致电getField()
,static
必须field
,{{1}}
答案 1 :(得分:0)
作为单身的第一个
FieldType getField()
应定义为
public static FieldType getField()
这样可以调用getField()
的方法FiledType
(静态方法),而无需创建实例
当然,您需要为FieldType
定义私有 构造函数(此处缺少)