1. ホーム
  2. java

[解決済み] Java enumとpublic static finalフィールドを持つクラスとでは、どのような利点がありますか?

2022-04-23 23:06:47

質問

私はC#に非常に精通していますが、Javaでより多くの仕事をするようになりました。私は、Javaの列挙型は基本的にC#のそれと同等であることを学ぶと思っていましたが、どうやらそうではなさそうです。当初、私はJavaの列挙型が複数のデータピースを含むことができることを知り、非常に有利に思えたので興奮しました( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). 例えば、enum 要素に特定の値を簡単に割り当てることができ、その結果、それなりの労力をかけずに整数を enum に変換することができます (すなわち 整数値を一致するJava Enumに変換する ).

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

EDIT: もっとはっきりさせましょう。たくさんのpublic static finalフィールドを持つクラスに対するJava enumsの利点は何でしょうか? 同じ型の ? 例えば、最初のリンクにある惑星の例では、これらの公開定数を持つクラスに対するenumの利点は何でしょう。

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さんの回答だけです。

どのように解決するのですか?

技術的には、enum を型付き定数の束を持つクラスとみなすことができますし、実際、enum 定数は内部でどのように実装されているかがわかります。内部的には enum しかし、便利なメソッド ( Enum javadoc のような、自分で実装しなければならないようなものです。 Enum.valueOf .