0
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()(创建单例实例),您需要一个类的实例,但到目前为止您还没有该实例。我有点困惑,请告诉我。谢谢!!!

4

2 回答 2

1

当然,最简单的单例是枚举

enum Singleton {
    INSTANCE;
}

但在这个更复杂的情况下,

有人将如何创建 FieldType 的单例对象。

他们必须调用getField()which must be static,就像 thefield

于 2013-04-28T17:46:32.540 回答
0

作为Singleton的第一条规则

FieldType getField()

应定义为

public static FieldType getField()

这样可以调用的方法getField()(静态方法) ,而无需创建实例FiledType

当然,您需要为(这里缺少)定义私有 构造函数FieldType

于 2013-04-28T17:47:26.533 回答