シングルトンは、静的メソッドによってインスタンス化されている間不変オブジェクトは、唯一その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. インターナショナルはどのように不変オブジェクトで動作しますか?
- 6. どのように文字列がJavaで不変であるか
- 7. スタティックインターフェイスのマッチングによるJavaユーティリティのシングルトン
- 8. どのようにシンビアンプラットフォーム用のJavaアプリを作るには?
- 9. MongoCollectionはどのように不変ですか?
- 10. 文字列はどのように不変ですか?
- 11. valはどのように不変ですか?
- 12. UIViewControllerのサブクラスをシングルトンにするにはどうすればよいですか?
- 13. は、どのように私はJavaで
- 14. は、どのように私はJavaで
- 15. ClojureでJavaクラスを不変にするにはどうすればよいですか?
- 16. Javaで不変なリストでもある不変のリストをKotlinで作成するには?
- 17. androidどのようにカスタム変数にリスナーを作るには?
- 18. swift3 - 私はスウィフト3にこれを変換することができますどのようにシングルトン
- 19. DDDでシングルトンを使用するにはどうすればよいですか?
- 20. どのようにPythonではJavaの
- 21. シングルトンを作成するには?
- 22. JBehaveはJavaでどのように動作しますか?
- 23. アップキャスティングはどのようにJavaで動作しますか?
- 24. ExecutorserviceはJavaでどのように動作しますか?
- 25. 「finalizerガーディアン」はどのようにJavaで動作しますか?
- 26. JComponent.paintImmediately()はJava Swingでどのように動作しますか?
- 27. scanner.next()はJavaでどのように動作しますか
- 28. Play 2.6でテストサーバをどのようにユニット化するかその動作シングルトンは廃止されました
- 29. Java EEシングルトンがビジーであるかどうかを確認する方法は?
- 30. はどのように、JavaではJavaの
12秒でビート= [ – KitsuneYMG
この例は有効なJavaから取られました;-) – darioo
@darioo:はい、それは 'leaveTheBuilding()'メソッドがありません:-) –