私はC#に非常に精通していますが、Javaでの作業が増えています。Javaの列挙型は基本的にC#の列挙型と同等であることがわかったはずですが、明らかにそうではありません。最初、私はJava enumに複数のデータが含まれている可能性があることを知って興奮しました(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。しかし、それ以来、列挙型要素に特定の値を簡単に割り当てる機能や、その結果、適切な労力をかけずに整数を列挙型に変換する機能など、C#でささいな多くの機能が見つからないことがわかりました(つまり、整数値を対応するJava Enumに変換します)。
だから私の質問はこれです:public static finalフィールドがたくさんあるクラスよりもJava enumに利点がありますか?それとも、よりコンパクトな構文を提供するだけですか?
編集:より明確にさせてください。同じ型の一連のpublic static finalフィールドを持つクラスに対するJava 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);
私の知る限り、カサブランカの答えはこれを満足する唯一のものです。
S
ので、今はおそらくそれらを関数に渡すなどについて話していることに注意してください。型安全が必要ですか?まあ、違いますが、ほとんどの人は「すべてがvoid*
良い」というcスタイルのタイプを検討し、バグを停止できます(特に、複数のenum / stringパラメータを渡す場合!)。また、定数を独自の名前空間などに配置します。これとは逆に、単純な変数を使用するだけの利点はありません。
int
1は任意の値を渡す可能性があるための、何の型の安全性はありません。一方、型付きオブジェクトは、型安全性の点で列挙型と違いはありません。
public static final
フィールドにのみ言及しているため、重複していない可能性があります。フィールドは型付きの値であり、必ずしもint
sである必要はありません。