case后面的表达式要求是常量,如果把final int MAX =10定义在B里面可以,但是定义在A里面,在B中对其进行引用就需要声明一个A的对象,这个对象是一个变量,所以a.MAX也就间接的成了一个变量,因此会报错!
A a = new A();这句你把a初始化了。a.MAX也被初始化了。所以a.MAX就不是常量了。case语句自然要报错。你不用 A a = new A();。直接在case中调用A.MAX就可以了
void oprate() {
switch(1){
case A.MAX:
break;
}
}
class A{
public static final int MAX = 10; //增加static 关键字 成为常量
}
class B{
int s = 10;
void oprate() {
A a = new A();
switch(s){
case A.MAX: break; //直接用
}
}
}
有分嘛
支持楼上