当前位置: 首页 > 知识库问答 >
问题:

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

鲁鸿
2023-03-14

首先,我要说明我对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;
            }
        }
    }
}

共有2个答案

仉宪
2023-03-14

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
}
岑元徽
2023-03-14

将其更改为:

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

线索就在错误中。您不需要使用枚举类型限定case标签,只需要使用它的值即可。

 类似资料:
  • 本文向大家介绍Java语言中枚举能使用switch语句吗?,包括了Java语言中枚举能使用switch语句吗?的使用技巧和注意事项,需要的朋友参考一下 Java中的枚举(enum)是一种存储一组常量值的数据类型。您可以使用枚举来存储固定值,例如一周中的天,一年中的月等。 您还可以使用自定义值定义一个枚举来声明常量。但是您需要一个实例变量,一个构造函数和一个getter方法来返回值。 与switch

  • 我有两种枚举类型(并希望用户能够添加自己的)。 如果我不在接受枚举类型的方法中使用枚举属性,这就很好。 但是,如果我希望模板E被识别为一个枚举(在这里的开关中使用),我会得到错误“不能打开类型E的值”(在Eclipse中,开关(E)中的“E”带有红色下划线) 我对擦除有一点了解,它在编译时擦除了关于模板的所有信息,所以这就是问题所在。但是我尝试传入clazz类或者实现一个接口都没有成功。对此有什么

  • 本文向大家介绍Java枚举类型在switch语句正确使用方法详解,包括了Java枚举类型在switch语句正确使用方法详解的使用技巧和注意事项,需要的朋友参考一下 很多人也许会尝试写下这样的代码: 正确的写法: 如果需要根据类型的名称返回枚举实例,可以在枚举类中加入方法 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 对于建议抛出异常的人: 抛出异常不会给我编译时错误,而是给我运行时错误。我知道我会抛出异常,我宁愿在编译时死掉,也不愿在运行时死掉。 首先,我正在使用Eclipse 3.4。 我有一个数据模型,它的mode属性是Enum。 我目前正在编写此模型的视图,并且我有代码 我收到一个错误“此方法必须返回类型为java.awt.Color的结果”,因为我没有默认大小写,并且在函数末尾没有返回xx