为什么我不能将其他类的常量添加到 java 中的 switch 语句中?

Cflow 访问

为什么我不能将其他类的常量添加到 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语句中使用?

这是一些图像:在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

塔索斯·P。

根据Java 语言规范(JLS):

一个 case 标签有一个或多个 case 常量。每个 case 常量必须是常量表达式(第 15.29 节)或枚举常量的名称(第 8.9.1 节),否则会发生编译时错误。

您的情况显然不是 a enum constant,所以我猜您正在尝试使用 aconstant expression但您的GameMode课程不符合 a 的条件constant expression

常量表达式是表示原始类型值或字符串的表达式,它不会突然完成并且仅使用以下内容组成...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

学习Java中的Switch语句

是否可以在java switch / case语句中使用类名?

我们可以在Java的同一switch语句中的另一个案例中调用“案例”吗?

es6中的case后在switch语句中花括号做什么?

Java:我只能在switch语句中遇到一种情况吗?

为什么在switch语句中不能完全限定枚举值?

为什么在Java 7中switch语句比String语句要快?

java string.contains在switch语句中

为什么在Java的switch语句中不能使用“ continue”?

Java switch语句中的多个/重复案例

switch语句中的变量数-Java

Swift:在switch语句中测试类类型

为什么不能在switch语句中声明变量?

我应该避免使用“!” 在Java中的if语句中?

Java 1.7仍然告诉我switch语句中的字符串不兼容

如何在Java中的if语句中添加公差

“ Self”在switch语句中工作,但在Swift中不是If语句

Java Switch语句中的多个变量

switch语句中的Switch语句

在switch语句中使用java.lang.Class <?>

为什么在switch语句中最终的Byte不能编译?

VS Code中的JavaScript:为什么不能在“ switch”语句中折叠“ case”代码块?

(Java)Switch语句中的全局变量问题

Java中switch语句的用法

在类的方法之一中的switch语句中使用在类中声明的int

在 switch 语句中创建对象时遇到问题,在后面的代码中“无法解析对象”(java)

是什么?和 : 在 Java 中的这个语句中的意思?

嵌入在 if 语句中的 switch 语句 (java)

我应该如何将我的方法(带数组)放在 java 的 switch 语句中?