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

在带有枚举和FINAL变量的Switch语句中获得编译错误?

卢深
2023-03-14

代码如下:-

private static final String ABC;
private void xyz(){
switch(ENUMImpl.getCountry()){         //** ENUMImpl is an ENUM class with a method getCountry() which returns the ENUM value

case COUNTRY1:
        ABC = "TMZ"; // The final field ABC cannot be assigned :: Remove final modifier of ABC
        break;
default:
        ABC = "NA";
        break;
  }
}

共有1个答案

窦啸
2023-03-14

您的字段是staticfinal

这意味着该字段位于级别,而不是实例级别。并且该字段必须分配一次--对于静态字段,在初始化期间分配很多字段。

没有什么能阻止你做:

public MyClass() {
    xyz();
    xyz();
}

您需要做一些类似的事情:

private static String xyz(){
    switch(ENUMImpl.getCountry()) {
        case COUNTRY1:
            return "TMZ";
        default:
            return "NA";
    }
}

static {
    ABC = xyz();
}

注:

  1. 您的格式非常难看,请在发布前使用IDE中的自动格式。
  2. enumimpl对任何东西来说都是一个可怕的名称。它显然是一个枚举,就像它声明的那样,它显然是一个实现,否则它就不存在了。因此,这完全没有告诉您它的目的。
 类似资料:
  • 首先,我要说明我对C#中的枚举更加熟悉,而Java中的枚举似乎是一团糟。 正如您所看到的,我试图在下一个示例中使用switch语句@enums,但无论我在做什么,我总是得到一个错误。 我收到的错误是: 限定的大小写标签必须替换为限定的枚举常量 问题是我很理解这个错误,但我不能只写VALUE_A,因为枚举位于另一个子类中。有没有办法解决这个问题?为什么会发生在Java?

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

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

  • 我想我还没有在Java中得到的概念。 我尝试将字符串与枚举中的特殊字符相比较。 但话说回来: 我收到一个编译器错误: 我做错了什么?

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

  • 以下代码不能用javac 1.8.0_144和ECJ编译: > 未声明为最终。 在赋值表达式(§15.26)中,它从不作为左手边出现。(请注意,包含 初始值设定项的局部变量声明符不是赋值表达式。) 它从不作为前缀或后缀递增或递减运算符的操作数出现(§15.14,§15.15)。 它从不作为前缀或后缀递增或递减运算符的操作数出现。 方法、构造函数、λ或异常参数(§8.4.1,§8.8.1,§9.4,