为什么我不能将其他类的常量添加到 java 中的 switch 语句中?
例子:我有一堂课
public class Game {
static class GameMode {
public static final GameMode SURVIVAL = new GameMode();
public static final GameMode ADVENTURE = new GameMode();
public static final GameMode GOD = new GameMode();
}
GameMode CurrentMode = GameMode.GOD;
}
但是当我定义一个 switch 语句时,它给了我一个错误:
void OnGame(){
switch (CurrentMode){
case GameMode.GOD: // case expressions must be constant expressionsJava(536871065)
System.out.println("Player On God Mode");
break;
case GameMode.SURVIVAL: // case expressions must be constant expressionsJava(536871065)
System.out.println("Player On Survival Mode");
break;
case GameMode.ADVENTURE: // case expressions must be constant expressionsJava(536871065)
System.out.println("Player On Adventure Mode");
break;
}
}
这让我很困惑。SURVIVAL、ADVENTURE、GOD模式都是常量,我在前面加了“final”,为什么不能在switch语句中使用?
根据Java 语言规范(JLS):
一个 case 标签有一个或多个 case 常量。每个 case 常量必须是常量表达式(第 15.29 节)或枚举常量的名称(第 8.9.1 节),否则会发生编译时错误。
您的情况显然不是 a enum constant
,所以我猜您正在尝试使用 aconstant expression
但您的GameMode
课程不符合 a 的条件constant expression
。
常量表达式是表示原始类型值或字符串的表达式,它不会突然完成并且仅使用以下内容组成...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句