7

そのように作成されたシングルトンがあります

private static class SingletonHolder { 
    public static Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
    return SingletonHolder.INSTANCE;
}

特定の時間にシングルトン インスタンスをリセットしたい。(現時点では、シングルトン インスタンスをリセットしても安全だと確信しています)。最終指定子を削除して、リセットしたいときにインスタンスをnullに設定しようとしましたが、問題は別のインスタンスを取得する方法です(nullのままになります)

別の質問は、SingletonHolder 内の final 指定子を削除しても安全かどうかです。

ありがとう

4

2 に答える 2

4

本当にシングルトン インスタンスをリセットする必要がある場合(これは実際にはあまり意味がありません)、すべての内部メンバーをプライベート オブジェクトでラップし、明示的なinitialize()andreset()メソッドを介して再初期化できます。そうすれば、シングルトン インスタンスを保持し、ある種の「リセット」機能を提供できます。

于 2013-10-06T16:17:01.853 に答える
2

他のクラスがシングルトンをリセットできるように、パッケージに表示される(デフォルトのアクセスレベル)メソッドを提供します。

class SingleGuy{
 private static SingleGuy=new SingleGuy();//eager init mode
 synchronized static void initTheGuy(){
  SingleGuy=new SingleGuy();//while this not recommended!
 }
 synchronized static void resetTheInstance(){
  /*Reset the singleton state as you wish. just like you reinitialized*/
 } 
}
于 2013-10-06T16:18:52.203 に答える