Java 列挙型と public static final フィールドを持つクラスとの違いは何ですか? 質問する

Java 列挙型と public static final フィールドを持つクラスとの違いは何ですか? 質問する

私は C# にとても精通していますが、Java で作業することが多くなりました。Java の enum は基本的に C# の enum と同等であると学習することを期待していましたが、どうやらそうではないようです。最初は、Java enum に複数のデータを含めることができ、非常に有利に思えることを知って興奮しました (java.util.enum.java は、Java EE のネイティブ クラスの enum です。しかし、それ以来、C#では些細な機能が数多く欠けていることに気付きました。たとえば、列挙型要素に特定の値を簡単に割り当てる機能や、その結果、かなりの労力をかけずに整数を列挙型に変換する機能などです(つまり、整数値を対応するJava Enumに変換する)。

そこで私の質問は、たくさんの public static final フィールドを持つクラスよりも Java 列挙型の方が有利な点があるかどうかです。それとも、よりコンパクトな構文を提供するだけでしょうか。

編集: もっと明確にしましょう。Javaの列挙型は、public static finalフィールドを多数持つクラスと比べてどのような利点があるのでしょうか。同じタイプのたとえば、最初のリンクの惑星の例では、これらのパブリック定数を持つクラスと比較して列挙型の利点は何でしょうか。

public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);

私の知る限り、casablanca の回答だけがこれを満たすものです。

ベストアンサー1

  1. 型の安全性と値の安全性。
  2. シングルトンを保証します。
  3. メソッドを定義およびオーバーライドする機能。
  4. 修飾なしでswitchステートメントステートメント内の値を使用できる機能。case
  5. 組み込み値の順序付けordinal().
  6. 値ではなく名前によるシリアル化により、ある程度の将来性が確保されます。
  7. EnumSetそしてEnumMapクラス。

おすすめ記事