gpt4 book ai didi

java - 为什么我得到一个枚举常量引用不能在 case 标签中被限定?

转载 作者:IT老高 更新时间:2023-10-28 20:43:47 26 4
gpt4 key购买 nike

为什么下面的代码编译失败,同时将case语句改为

case ENUM1: doSomeStuff();

有效吗?

public enum EnumType
{
ENUM1, ENUM2, ENUM3;

void doSomeStuff()
{
switch(this)
{
case EnumType.ENUM1: doSomeStuff();
}
}
}

最佳答案

这是为了避免与不同枚举类型进行比较的能力。将其限制为 one 类型是有意义的,即 switch 语句中枚举值的类型。

更新:其实是为了保持二进制兼容性。这是大约一半的引用chapter 13.4.9 JLS:

One reason for requiring inlining of constants is that switch statements require constants on each case, and no two such constant values may be the same. The compiler checks for duplicate constant values in a switch statement at compile time; the class file format does not do symbolic linkage of case values.

换句话说,由于EnumType.ENUM1中的类标识符,它不能表示为编译时常量表达式,而switch语句需要它。

关于java - 为什么我得到一个枚举常量引用不能在 case 标签中被限定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com