Java:在子类下使用带有枚举的switch语句

Java: using switch statement with enum under subclass

首先我要说的是,我对C语言中的枚举更加熟悉,Java中的枚举看起来相当混乱。

如您所见,我在下一个示例中尝试使用switch语句@enums,但无论我在做什么,总是会得到一个错误。

我收到的错误是:

The qualified case label SomeClass.AnotherClass.MyEnum.VALUE_A must be replaced with the unqualified enum constant VALUE_A

问题是我很理解这个错误,但是我不能只写一个值,因为枚举位于另一个子类中。有没有办法解决这个问题?为什么它在Java中发生?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//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
2
3
4
5
6
switch (enumExample) {
    case VALUE_A: {
        //..
        break;
    }
}

的CLUE冰的误差。你不需要,case标签与枚举类型,只是它的价值。


《Java infers自动式的元素在case,所以必须unqualified的标签。

1
2
3
4
5
6
7
8
int i;
switch(i) {
   case 5: // <- integer is expected
}
MyEnum e;
switch (e) {
   case VALUE_A: // <- an element of the enumeration is expected
}


这是应该做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Main Class
public class SomeClass {

    //Sub-Class
    public static class AnotherClass {
        public enum MyEnum {
            VALUE_A, VALUE_B
        }    
        public MyEnum myEnum;
    }

    public void someMethod() {
        AnotherClass.MyEnum enumExample = AnotherClass.MyEnum.VALUE_A; //...

        switch (enumExample) {
            case VALUE_A: { //<-- error on this line
            //..
            break;
            }
        }
    }
}

错误:

1
case AnotherClass.MyEnum.VALUE_A

右:

1
case VALUE_A:

我是怎么利用它。它的工作fantastically -冰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public enum Button {
        REPORT_ISSUES(0),
        CANCEL_ORDER(1),
        RETURN_ORDER(2);

        private int value;

        Button(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

switch-caseAA和shown下面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Override
public void onClick(MyOrderDetailDelgate.Button button, int position) {
    switch (button) {
        case REPORT_ISSUES: {
            break;
        }
        case CANCEL_ORDER: {
            break;
        }
        case RETURN_ORDER: {
            break;
        }
    }
}

在这种方式someMethod()写:

1
2
3
4
5
6
7
8
9
10
public void someMethod() {

    SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A;

    switch (enumExample) {
    case VALUE_A:
        break;
    }

}

你必须在开关语句使用的常数的名称只。