最初に、私はC#の列挙型にかなり慣れていることを述べます。Javaの列挙型はかなり混乱しているようです。
ご覧のとおり、次の例ではswitchステートメント@ enumsを使用しようとしていますが、何をしている場合でも常にエラーが発生します。
私が受け取るエラーは:
修飾されたケースラベル
SomeClass.AnotherClass.MyEnum.VALUE_A
は、修飾されていない列挙型定数で置き換える必要がありますVALUE_A
問題は私がエラーを完全に理解していることですが、列挙型が別のサブクラスにあるため、VALUE_Aを書き込むことはできません。この問題を解決する方法はありますか?そして、なぜそれがJavaで起こっているのですか?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
ケースステートメントを修飾しようとすると、ある意味で、1つのswitchステートメント内で(同じenumタイプではなく)異なるタイプのenumを混在させることができるとあなたは言っています。ここで説明されているように、Javaはこのアプローチでこれを阻止しています。digizol.com
—
2010/10 /
IntelliJ 2018.2でクラスをリファクタリング(移動)しているときにこれが私に起こりました
—
Daniel Alder
Enum
はコツをつかんだら非常に便利です。混乱することはありません。他のプラットフォームで見られるような単純な列挙型(単なるラベル付き整数値)よりもはるかに柔軟で実用的です。Oracleチュートリアルを参照してください。最適化されたSet
/Map
実装を発見:EnumSet
&EnumMap
。