case Weekday.Mon.dayValue :会报Constant expression required错误
Topic sourcecase只能比较常量,不能比较变量,所以要在编译期计算常量的值。
这种final定义:
class X {
static final int y = 1;
}
编译期能计算出来,所以可以用 case X.y,编译器麻溜地把代码直接替换成 case 1
这种final定义:
class X {
static final int y = Integer.parseInt(System.getProperty("NUMBER_OF_PROCESSORS"));
}
编译期算不出来,只能运行才知道,所以不能用case X.y
- 1
丶IF73666
**我想做的是 输入enum对象对应的那个int值或string值,得到这个enum对象。
**
问题:
**case Weekday.Mon.dayValue :会报Constant expression required错误 百度了一下说错误的原因是由于编译器未能在编译期间拿到这个值所以报错。
**
百度了解决办法,网友给出的解答是:这个值没有被final修饰。加上final就好了。
但是我enum类weekday中定义dayValue时明明就有final修饰啊。依旧是报这个错。如果有懂的同学,可以给我解答一下嘛?
我现在用的另一种方式实现这个想法:
主函数中:
System.out.println("输入一个整数");
int chose = scanner.nextInt();
Weekday day1 = enumChose(chose);
System.out.println(day1);// 输入1 输出结果是 MON 1 星期一 输入9 输出结果:null
enumChose()静态方法中:
public static Weekday enumChose(int chose){
Weekday day = null;
for(Weekday w : Weekday.values()){
if(w.dayValue==chose){ //匹配enum的dayValue字段
day = w;
break; //查找到该对象,返回
}
}
return day;
}
weekday中:
enum Weekday {
MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");
public final int dayValue;
private final String chinese;
private Weekday(int dayValue, String chinese) {
this.dayValue = dayValue;
this.chinese = chinese;
}
public int getDayValue() {
return dayValue;
}
public String getChinese(){
return chinese;
}
@Override
public String toString() {
if(this==null) return "null";
return name()+" "+dayValue+" "+chinese;
}
}