21

switch ケースで enum 値を文字列として使用できないのはなぜですか? (または、これの何が問題なのですか:)

String argument;
switch (argument) {
    case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
    // something    
break;
    case MyEnum.VALUE2.toString():
    // something else
break;
4

3 に答える 3

55

コンパイル時に既知の文字列のみを使用できます。コンパイラは、その式の結果を判断できません。

おそらくあなたは試すことができます

String argument = ...
switch(MyEnum.valueOf(argument)) {
   case VALUE1:

   case VALUE2:
于 2012-04-30T16:47:06.130 に答える
7

case MyEnum.VALUE1.toString(): // これは "VALUE1" と等しくありませんか?

いいえ、必ずしもそうではありません: 独自の実装を自由に提供できます。toString()

public enum MyType {
VALUE1 {
    public String toString() {
        return "this is my value one";
    }
},

VALUE2 {
    public String toString() {
        return "this is my value two";
    }
}

}

さらに、あなたのコードを保守している誰かが、あなたが会社を辞めた後にこの実装を追加する可能性があります。そのため、文字列値に依存せず、代わりに s の数値 (定数MyEnum.VALUE1MyEnum.VALUE2などで表される)を使用することに固執する必要がありますenum

于 2012-04-30T16:46:39.623 に答える
1

Peter Lawreyのコメントに追加するには、JDK7の前後のJavaでの文字列の切り替えについて説明している昨年のこの投稿をご覧ください。

于 2012-04-30T18:21:42.153 に答える