Java switch语句中需要常量表达式

Java switch语句中需要常量表达式,java,android,switch-statement,Java,Android,Switch Statement,我想在switch语句中使用全局常量。我以这种方式在名为ColorManager的单例中编写了常量 public static final int blue = 3; public static final int red = 5; public static final int black = 7; 在我的家庭活动中我编写了这段代码 public void onRequestPermissionsResult(int requestCode, String permissions[], in

我想在switch语句中使用全局常量。我以这种方式在名为
ColorManager
的单例中编写了常量

public static final int blue = 3;
public static final int red = 5;
public static final int black = 7;
在我的
家庭活动中
我编写了这段代码

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    ColorManager cm = ColorManager.getInstance(this);
    switch (requestCode) {
        case cm.blue: {
        }
        case cm.red: {
        }
        case cm.black: {
        }
    }
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {
        case ColorManager.blue: {
        }
        case ColorManager.red: {
        }
        case ColorManager.black: {
        }
    }
}
但是我在switch语句中得到一个错误:

需要常量表达式


这些值是最终的,所以是常量,我不明白为什么会出现这个错误。我发现了类似的主题,但在所有情况下,属性都没有声明为final。

如果静态访问静态final字段,它将编译;e、 g.
外壳颜色管理器。蓝色:
。如果您尝试从变量
cm
访问then,则会阻止编译器将其识别为编译时常量。

如果您静态访问静态最终字段,它将编译;e、 g.
外壳颜色管理器。蓝色:
。如果尝试从变量
cm
访问then,则会阻止编译器将其识别为编译时常量。

使用ClassName.variable即ColorManager.red

使用ClassName.variable即ColorManager.red

尝试此代码

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    ColorManager cm = ColorManager.getInstance(this);
    switch (requestCode) {
        case cm.blue: {
        }
        case cm.red: {
        }
        case cm.black: {
        }
    }
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {
        case ColorManager.blue: {
        }
        case ColorManager.red: {
        }
        case ColorManager.black: {
        }
    }
}
试试这个代码

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    ColorManager cm = ColorManager.getInstance(this);
    switch (requestCode) {
        case cm.blue: {
        }
        case cm.red: {
        }
        case cm.black: {
        }
    }
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {
        case ColorManager.blue: {
        }
        case ColorManager.red: {
        }
        case ColorManager.black: {
        }
    }
}

使用
ColorManager.blue
等等,而不是
cm.blue
java中没有常量关键字。Final并不意味着要注意静态字段,也不需要在
case
块周围加上花括号(
{
}
)。您应该使用
break
退出案例返回
。如果不这样做,将执行下一个
case
下的命令。使用
ColorManager.blue
等等,而不是
cm.blue
java中没有常量关键字。Final并不意味着要注意静态字段,也不需要在
case
块周围加上花括号(
{
}
)。您应该使用
break
退出案例返回
。如果不这样做,将执行下一个
案例下的命令。