定义可以在java中的switch语句中使用的#define之类的常量

use*_*184 3 java android constants

我想定义一些常量,#define myXYZ 1所以我也可以在switch语句中使用它们.

当我做的时候经常建议

public static final Integer myXYZ = 1;
Run Code Online (Sandbox Code Playgroud)

case Constants.myXYZ:
Run Code Online (Sandbox Code Playgroud)

我得到了编译器消息 case expression must be constant

解决这个问题的最佳方法是什么?

谢谢!

Jon*_*eet 12

只需将其更改为int它应该没问题:

public static final int myXYZ = 1;
Run Code Online (Sandbox Code Playgroud)

这是因为case值必须是常量表达式或枚举名称.从JLS的第15.28节(常量表达式):

编译时常量表达式是表示基本类型值的表达式或不突然完成的字符串,仅使用以下[...]组成

因此,类型的表达式int可以是常量表达式,但类型的表达式Integer不能.

如果这是一组作为一个概念本身有意义的值,那么枚举可能会更有意义.