シングルトンは、静的メソッドによってインスタンス化されている間不変オブジェクトは、唯一そのconstuctorによって初期化されます。どのようにJavaで不変シングルトンを作る?は、どのようにJavaで不変シングルトンを作るには?
答えて
シングルトンが 静的メソッドで
をインスタンス化している間に、これはそれを行うための通常の方法ですが、これはなしで、唯一の方法を意味しています。 Javaの1.5では
シングルトンの新バージョンでは、列挙型のシングルトンパターンです:
public enum Elvis{
INSTANCE // this is a singleton, no static methods involved
}
そして列挙型はコンストラクタ、メソッドやフィールドを持つことができるので、あなたは彼らにあなたが望むすべての不変の状態を与えることができます。
参考:
- Java tutorial: Enum Types
- Effective Java、項目3
- Singleton (the enum way) ウィキペディア(Wikipedia)
また、用語シングルトンは私の余地を残してnterpretation。シングルトンは、定義された範囲ごとに1つのオブジェクトがあることを意味するが、スコープは、物事の数になります
のJava VMクラスローダ(私を思い出させるためのサンパウロEbermann @感謝):この場合の使用enumsでまたはinitialize-through-static-inner-class patternです。もちろんこれは、通常、シングルトンが意味するものです。
は注意が:複数のクラスローダによってロードされた場合、列挙型、および他のすべてのシングルトンが壊れています。- エンタープライズアプリケーション(この場合、コンテナ管理のシングルトンが必要です(Spring singleton beanなど)。これは(当然のか、VMごとに1つのオブジェクト)いくつかのVMあたりのオブジェクトまたは複数のVMごとに一つのオブジェクト
- スレッド再び(
- 要求/セッション、あなたがよ(
ThreadLocal
を使用)することができ私は何を忘れた - )、これを管理するためのコンテナが必要Spring、Seamおよびいくつかの他の人があなたのためにそれを行うことができますか?
(それは通常、コンテナ管理のコンポーネントのための簡単ではありませんが)上記の溶液は、ショーンが指摘
public enum MySingleton {
instance;
//methods
}
//usage
MySingleton.instance.someMethod();
独自の方法でそれぞれ、不変行うことができるのすべての良い方法です彼らの作成は高価でない場合はシングルトンを初期化します。あなたは「遅延ロード」能力にしたい場合は、需要ホルダーイディオムの初期に見て。
// from wikipedia entry
public class Singleton {
// Private constructor prevents instantiation from other classes
private Singleton() {
}
/**
* SingletonHolder is loaded on the first execution of Singleton.getInstance()
* or the first access to SingletonHolder.INSTANCE, not before.
*/
private static class SingletonHolder {
public static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
うん、それは私が「static-initial-inner-class-initial-through-class」パターンと呼んだものです:-) +1 –
@Sean:ああ、あなたは同じことを指しているとは思いませんでした。あなたの答えは本当に完璧だったと思います。 +1 :) –
複雑ではありません。不変であるためには、オブジェクトはいったん作成されると変更不可能でなければなりません。これは通常、「コンストラクタでのみ変更可能」を意味すると解釈されますが、それを変更不可能にする別の方法を作成する場合は、オブジェクトが初期化された後に変更できない限り、オブジェクトは変更不可能です。 Singletonインスタンスを初期化の一部として設定することを検討できます。
不変性の利点のほとんどは、シングルトンでは無関係です。
- 1. PHPでシングルトンを作成するにはどうすればよいですか?
- 2. Javaで真のシングルトンを作成するには?
- 3. シンプルなシングルトンをどのように作成できますか?
- 4. シングルトンIEnumerableを作成するにはどうすればよいですか?
- 5. どのようにシンビアンプラットフォーム用のJavaアプリを作るには?
- 6. スタティックインターフェイスのマッチングによるJavaユーティリティのシングルトン
- 7. UIViewControllerのサブクラスをシングルトンにするにはどうすればよいですか?
- 8. ClojureでJavaクラスを不変にするにはどうすればよいですか?
- 9. は、どのように私はJavaで
- 10. は、どのように私はJavaで
- 11. androidどのようにカスタム変数にリスナーを作るには?
- 12. 「finalizerガーディアン」はどのようにJavaで動作しますか?
- 13. JComponent.paintImmediately()はJava Swingでどのように動作しますか?
- 14. JBehaveはJavaでどのように動作しますか?
- 15. どのように単一のexeファイルにjava webapplicationを変換するには?
- 16. は、どのように私は、Java
- 17. は、どのように私は、Java
- 18. Java EEシングルトンがビジーであるかどうかを確認する方法は?
- 19. Java優先キューはどのように動作するはずですか?
- 20. 抽象的な不変クラスを作成するにはどうすればよいですか?
- 21. Javaのガベージコレクタはどのように動作しますか?
- 22. Javaシングルトンは静的変数を使用すべきですか?
- 23. どのようにJavaでリストを操作する
- 24. Javaでハッシュテーブルを作成するにはどうすればよいですか?
- 25. Javaでオーディオストリーマーを作成するにはどうすればよいですか?
- 26. Javaでオンスクリーンキーボードを作成するにはどうすればよいですか?
- 27. どのようにJavaで
- 28. Java JVMはどのように動作しますか?
- 29. シングルトンによるユニットテスト
- 30. キャッシュの不自由なクイックソートはどのようにですか?
12秒でビート= [ – KitsuneYMG
この例は有効なJavaから取られました;-) – darioo
@darioo:はい、それは 'leaveTheBuilding()'メソッドがありません:-) –