所以,我正在研究这个有一些静态常量的类:
public abstract class Foo {
...
public static final int BAR;
public static final int BAZ;
public static final int BAM;
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我想要一种基于常量获取相关字符串的方法:
public static String lookup(int constant) {
switch (constant) {
case Foo.BAR: return "bar";
case Foo.BAZ: return "baz";
case Foo.BAM: return "bam";
default: return "unknown";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我编译时,我constant expression required在每个3个案例标签上都会出错.
我知道编译器需要在编译时知道表达式来编译一个开关,但为什么不是Foo.BA_常量?
我想知道方法add()中的2个声明之间的区别,如下所示.
final int c;
c = 20;
Run Code Online (Sandbox Code Playgroud)
和
final int c = 20;
Run Code Online (Sandbox Code Playgroud)
我认为两者都是最终变量,我无法重新分配任何新值.以下是以不同方式处理上述声明的方法.
void add() {
final int a = 30;
final int b = 10;
final int c;
c = 20;
switch (a) {
case b + c:
System.out.println("In case b+c");
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
抱怨,上面的方法根本没有编译
常数表达式需要案例b + c
如果声明变量c并在一行中初始化,例如final int c = 30;.有用.