編集:回答済み-エラーはメソッドが静的ではなかった
私が使用している シングルトンデザインパターン
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// Private constructor prevents instantiation from other classes
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
私の質問は、anotherクラスでクラスSingletonのオブジェクトを作成するにはどうすればよいですか?
私はもう試した:
Singleton singleton = new Singleton();
// error - constructor is private
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context
正しいコードは何ですか?
ありがとう、スペンサー
_Singleton singleton = Singleton.getInstance();
_
正しい方法です。 getInstance()
メソッドが実際にstatic
であることを確認してください。
Singleton
の実装は安全とはほど遠いため、オブジェクトはリフレクションを介してインスタンス化できるため、 enum
に基づいてシングルトンを作成することをお勧めします。
Singleton singleton = Singleton.getInstance();
は機能するはずです-コードを考えると、そのエラーは意味がありません。正しく報告していますか? (上記のコードで行ったgetInstance
メソッドを静的にするのを忘れていた場合は意味があります。)
あなたがクラスのために私たちに与えたコードは正しいです。
最後に、1つの概念的な注意事項:まず、「クラスシングルトンのオブジェクトを作成する」のではありません。これがシングルトンの要点です。 :)既存のオブジェクトへの参照を取得しているだけです。
これです:
_ Singleton singleton = Singleton.getInstance();
_
動作するはずです。これは、Javaで静的メソッドを呼び出す方法です。そして、getInstance()
メソッドはstatic
として宣言されています。まったく同じSingleton
クラスを使用していますか?または、同じというクラスを他のパッケージにインポートした可能性があります。
複数のコピーへのアクセスを許可したくないためです。したがって、オブジェクトを手動でインスタンス化する必要がありますが、アクセサメソッドへの後続の呼び出しが(新しいものを作成するのではなく)シングルトンを返すことができるように、シングルトンへの参照を保持する必要があります。だからです
Singleton singleton = Singleton.getInstance();
SingletonObjectにアクセスする正しい方法。
public static Singleton getInstance()
を使用する必要がありますが、実装はあまり正しくありません。
if (instance == null) {
instance = new Singleton();
}
return instance;
これはあなたがそれをするべき方法です。これにより、インスタンスが存在しない場合はインスタンスが作成されるか、単に既存のインスタンスが返されます。あなたのコードも同じことをしますが、これは読みやすさを増します。
次のように、クラスの複数のインスタンスを作成することは引き続き可能です。
Singleton.getInstance().clone()
使用しても問題ありません
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context
これは、クラスからシングルトンオブジェクトを取得する方法です。私に何か他のものがなければなりません。詳細を投稿してください
getInstance()メソッドは「静的」でインスタンスフィールドでもあるため、Singleton.getInstance();を使用できます。クラスの新しいexepleを作成せずに。 Thihsはシングルトーンのポイントです