Java Switch Statement: Constant Expression Requirement
When using a switch statement in Java, the case labels must be constant expressions. This means that the expression must be known at compile time. In the given code:
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"; } }
The compiler errors on the case labels because Foo.BAR, Foo.BAZ, and Foo.BAM are not considered constant expressions. While they are declared as constants within the class, they are not initialized with specific values. A constant expression requires a value that can be evaluated at compile time, such as a literal or a final variable initialized with a compile-time constant.
To resolve this issue, the Foo.BAR constants can be initialized with compile-time constant values:
public abstract class Foo { public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3; }
This will allow the switch statement to compile successfully, as the case labels will now be evaluated as constant expressions.
Alternatively, the constants can be declared as an enum instead, allowing for cleaner code and more strongly typed constants. However, enums have certain restrictions, such as requiring a default case and specific enum values as case labels.
The above is the detailed content of Why Do Java Switch Statements Require Constant Expressions for Case Labels?. For more information, please follow other related articles on the PHP Chinese website!