ホームページ >Java >&#&チュートリアル >Java のシングルトンとしての列挙型: どの実装が最適ですか?

Java のシングルトンとしての列挙型: どの実装が最適ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 21:55:311092ブラウズ

Enums as Singletons in Java: Which Implementation is Best for You?

Java におけるシングルトンとしての列挙型: 詳細な検討

Java プログラミング言語では、列挙型をシングルトンとして使用すると、クラスが存在します。ただし、列挙型を使用してこのシングルトン パターンを実装するにはさまざまなアプローチを使用でき、機能と使用法が若干異なります。

方法 1: プライベート コンストラクターで列挙型インスタンスを使用する

<code class="java">public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}</code>

Inこのアプローチでは、INSTANCE フィールドが作成され、Elvis 列挙型のシングルトン インスタンスが効果的に定義されます。プライベート コンストラクターは、列挙定義外でのインスタンス化を制限します。インスタンスにアクセスするには、Elvis.INSTANCE.getAge() を使用します。

方法 2: パブリック静的メソッドを使用する

<code class="java">public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}</code>

ここで、INSTANCE フィールドは以前と同様にプライベートです。ただし、enum インスタンスでゲッターを公開する代わりに、パブリック静的メソッド getAge() が提供されます。 Elvis.getAge() を呼び出すと、enum インスタンスの age プロパティが取得されます。

利点と欠点

方法 1:

  • 長所: Elvis.INSTANCE として常に利用できるため、シングルトン インスタンスへの即時アクセスが提供されます。
  • 短所: プライベート コンストラクターにより、Elvis クラスを次のように渡すことが困難になる可能性があります。パラメーター。パブリック コンストラクターを持つクラスとして認識されない可能性があります。

方法 2:

  • 長所: 静的メソッド呼び出しを許可することで柔軟性を提供し、外部コンポーネントへのバインドを容易にし、列挙型インスタンスを渡す制限を回避します。
  • 短所: 方法 1 よりも若干冗長です。

ユースケースの考慮事項

列挙型をシングルトンとして使用する最良のアプローチは、特定のユースケースによって異なります。

  • シングルトン インスタンスへの直接参照が必要で、インスタンスを期待する外部コンポーネントにバインドされる場合は、方法 1 の方が適している可能性があります。
  • 静的メソッドの呼び出しで十分であり、バインディングの柔軟性を確保することが優先される場合は、メソッド 2 がより便利なオプションを提供します。

一般に、機能がスタンドアロンの場合は、静的メソッドの使用を検討してください。 enum クラスの明示的なインスタンスは必要ありません。インスタンスのプロパティが不可欠であり、直接アクセスが必要な状況では、最初のアプローチの方が適切です。

以上がJava のシングルトンとしての列挙型: どの実装が最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。