我有以下代码:
public class Main {
static final String fu = Week.class.getName();
public static void main(String[] arg0){
String h = "dummy";
switch (h) {
* case fu:
System.out.println(8);
break;
default:
break;
}
}
}
现在Eclipse抱怨* case expressions must be constant expressions
。但是我按照我的要求使fu
保持不变!为什么这还不够,我能做什么(除了if-else)?
答案 0 :(得分:4)
答案 1 :(得分:0)
我遇到的问题似乎是编译器在编译时需要一个值,以便使你的字符串变量为常量。
在你的情况下,类名称来自运行时而不是在编译时,因此编译器不会将其视为常量
使变量保持不变
- 仅使用常量表达进行初始化
- 应声明为最终
- 原语或字符串
- 声明时初始化
所以你无效第一个条件。仅供参考,请查看以下程序 -
这里 case x 会给出错误,因为它来自class的@ runtime。但是,如果将它设置为20之类的常量,它将运行良好。
package com;
public class Main {
static final int x = Week.getx();
public static void main(String[] arg0){
int i = 10;
switch (i)
{
case x : System.out.println("Hello"); break;
case 12 : System.out.println("Bye"); break;
}
}
}
包com;
public class Week {
public static int getx()
{
return 10;
}
}
告诉您是否需要更多解释!