3

列挙型アプローチを使用してシングルトンを実装します。

public enum Singleton {
    INSTANCE;

    public void doStuff(String stuff) {
        System.out.println("Doing " + stuff);
    }
}

どうすればそれを正しく呼び出すことができますか (実行するという意味ではなく、書き方だけです)。それはまだクラスですか、それとも列挙型ですか? 私は理論的な部分に興味があります。
オブジェクト指向とクラスについて言えば、列挙型の Singleton クラスを作成したと言えますか?

4

6 に答える 6

3

Java の enum は (ご存知のように) 単なるクラスであるため、上記のいずれかを呼び出しても問題ありません。少し主観的ですが、強調したい側面に依存すると思います。

  • 状態とメソッドでオブジェクトをインスタンス化できるのはこのことであることを強調したい場合は、それをクラスと呼びます
  • オブジェクト自体を強調表示する場合は、それをシングルトン インスタンスと呼びます
  • 列挙型を使用してシングルトン パターンを実装していることを強調したい場合は、それを列挙型と呼びます
  • それがシングルトンであるという事実を強調したい場合 (そのパターンがどのように実装されているかは言及せずに)、それをシングルトンと呼びます
  • 列挙型を介して実装されたシングルトン パターンであるという事実を強調したい場合は、シングルトン列挙型と呼びます。

私はそれらの用語のいずれかを理解するでしょうし、誰かをどちらを使用するかで判断することはありません.

于 2012-05-10T05:14:36.730 に答える
2

これは列挙型であり、クラスでもあります。Enum はクラスの一種です。

于 2012-05-10T05:12:51.113 に答える
0

これは Enum であり、Java5.0 以降のクラスの一種でもあります。

Enumでシングルトンを作成しています。

列挙型の詳細

于 2012-05-10T05:22:58.600 に答える
0

この場合、列挙型 (この場合は INSTANCE) であるシングルトン オブジェクト INSTANCE を作成しました。jvm は、列挙型のインスタンスが 1 つだけ存在することを保証します。したがって、デフォルトでシングルトンとして表示できます。ここで詳細を確認できます

于 2012-05-10T05:13:44.093 に答える
0

それは列挙型です。Java 言語により、INSTANCE 列挙値が 1 回 (クラスローダーごと、つまり通常は JVM ごとに 1 回) インスタンス化され、Singleton.INSTANCE フィールドを使用して単一のインスタンスにアクセスできるようになります。

次のこともできます。

public class Singleton {
    public static Singleton instance INSTANCE = new Singleton();

    private Singleton() { /* private ctor so people can't instantiate their own */ }
}

しかし、列挙型アプローチにより、よりクリーンになります(JDK5以降を使用している場合)

于 2012-05-10T05:14:24.393 に答える
0
Java programming language enum types are much more powerful than their
counterparts in other languages. The enum declaration defines a class 
(called an enum type).
The enum class body can include methods and other fields. The compiler 
automatically adds some special methods when it creates an enum. 
于 2012-05-10T05:15:48.343 に答える