private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
コンストラクタFoo()は、複数のスレッドから呼び出される可能性があります。私の懸念事項は、プライベート静的フィールド 'コールバック'と静的メソッド 'getCallback()'です。次のコードを見直しても安全ですか?
「getCallback()」が呼び出されるたびに、静的フィールド 'callback'に新しい値が割り当てられます。
マイ推測手段は、フーの静的フィールド「コールバック」は、潜在的に他で上書きすることができるようにキーワード静的は常に、クラスではないインスタンスに接続されているので、それはスレッドセーフではないということですスレッドは別のFoo()を構築しています。これは正しいです?
私が間違っている場合は、私に修正してください。ありがとう!
編集:私の意図は、クラスのどこかでコールバックを保持することです、私は後でそれを再利用することができます。しかし、これは容易ではありません.Fooは渡される 'コールバック'を強制するコンストラクタを持つクラスから継承されるからです。
良い質問。これらの問題は、論理的に自分自身で考えるのは難しいです。 –
コンパイルされません。 actionCallbackはどこから来たのですか?原則として、コンストラクタを介して静的フィールドを初期化しないでください。混乱を避ける必要があります。 –
申し訳ありませんが、 'actionCallback'は 'コールバック'とされていました。私の意図は、クラスのどこかで 'コールバック'を保持することです、私は後でそれを再利用することができます。しかし、これは容易ではありません.Fooは渡される 'コールバック'を強制するコンストラクタを持つクラスから継承されるからです。 – His