Java Switch 语句常量表达式混乱
在 Java 中,switch 语句需要常量表达式作为 case 标签。然而,即使使用看似常量的变量,开发人员也经常会遇到抱怨非常量表达式的错误。
考虑以下示例:
public abstract class Foo { public static final int BAR; public static final int BAZ; public static final int BAM; 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"; } } }
编译此代码时,您可能会遇到“常量”每个案例标签上都出现“需要表达式”错误。
为什么不是 Foo.BAR 变量常量?
虽然 Foo.BAR 变量从执行角度来看实际上是常量,但它们不是 Java 语言规范 (JLS) 所要求的“编译时常量”。 JLS 第 15.28 节将常量表达式定义为:
在上面的示例中,Foo.BAR 变量没有使用显式初始化器声明,因此它们不符合编译时常量的条件。
解决方案:
要解决该错误,请使用编译时常量初始化 Foo.BAR 变量表达方式:
public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3;
以上是为什么 Java 的 Switch 语句不接受看似常量的变量作为 case 标签?的详细内容。更多信息请关注PHP中文网其他相关文章!