我想定义一些常量,例如#define myXYZ 1
,所以我也可以在switch
语句中使用它们。
当我做经常建议的
时public static final Integer myXYZ = 1;
和
case Constants.myXYZ:
我收到case expression must be constant
解决这个问题的最佳方法是什么?
谢谢!
答案 0 :(得分:12)
只需将其更改为int
即可。
public static final int myXYZ = 1;
这是因为案例值必须是常量表达式或枚举名称。来自JLS的section 15.28(常量表达式):
编译时常量表达式是表示基本类型值的表达式或不突然完成的字符串,仅使用以下[...]
组成
因此,int
类型的表达式可以是常量表达式,但类型Integer
的表达式不能。
如果这是一组作为一个概念本身有意义的值,那么枚举可能会更有意义。
答案 1 :(得分:3)
使用int
:
public static final int myXYZ = 1;
或使用enum
常量。
答案 2 :(得分:1)
如果你想在它们之间切换,最好设计它来代替使用枚举