首页 文章

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

提问于
浏览
194

首先,我将说明我对C#中的枚举更加熟悉,看起来java中的枚举非常混乱 .

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

The error I receive is:

必须使用非限定枚举常量VALUE_A替换限定案例标签SomeClass.AnotherClass.MyEnum.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;
            }
        }
    }
}

5 回答

  • 0

    把它改成这个:

    switch (enumExample) {
        case VALUE_A: {
            //..
            break;
        }
    }
    

    线索出现错误 . 您不需要使用枚举类型限定 case 标签,只需要使用其值 .

  • 2

    Java会自动推断 case 中元素的类型,因此标签必须是不合格的 .

    int i;
    switch(i) {
       case 5: // <- integer is expected
    }
    MyEnum e;
    switch (e) {
       case VALUE_A: // <- an element of the enumeration is expected
    }
    
  • 27

    这应该做:

    //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;
                }
            }
        }
    }
    
  • 427

    以这种方式写 someMethod()

    public void someMethod() {
    
        SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A;
    
        switch (enumExample) {
        case VALUE_A:
            break;
        }
    
    }
    

    在switch语句中,您必须仅使用常量名称 .

  • 0

    这就是我使用它的方式 . 它的工作非常出色 -

    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-case 如下图所示

    @Override
    public void onClick(MyOrderDetailDelgate.Button button, int position) {
        switch (button) {
            case REPORT_ISSUES: {
                break;
            }
            case CANCEL_ORDER: {
                break;
            }
            case RETURN_ORDER: {
                break;
            }
        }
    }
    

相关问题