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()なければなりませんstaticfield

于 2013-04-28T17:46:32.540 に答える
0

シングルトン最初のルールとして

FieldType getField()

として定義する必要があります

public static FieldType getField()

インスタンスを作成せずにのメソッドgetField()(静的メソッド)をFiledType呼び出せるようにする

もちろん、プライベート コンストラクターを定義する必要がありますFieldType(ここでは欠落していました)。

于 2013-04-28T17:47:26.533 に答える