Case constant must be a compile time constant! : switch « Statements « SCJP






It is not enough to be final, it must be a compile time constant.

public class MainClass{
    public static void main(String[] argv){
        final int a = 1;
        final int b;
        b = 2;
        int x = 0;
        switch (x) {
          case a:     // ok
          case b:     // compiler error
        }
    }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	case expressions must be constant expressions

	at MainClass.main(MainClass.java:9)








5.8.switch
5.8.1.switch Statements
5.8.2.Case constant must be a compile time constant!
5.8.3.Method being invoked on the object reference must return a value compatible with an int.
5.8.4.It's illegal to have more than one case label using the same value.
5.8.5.It is legal to leverage the power of boxing in a switch expression.
5.8.6.Break and Fall-Through in switch Blocks
5.8.7.Insert a break into each case
5.8.8.Fall-through logic
5.8.9.The Default Case
5.8.10.The default case doesn't have to come at the end of the switch.
5.8.11.default works just like any other case for fall-through!
5.8.12.To ensure that only one case of a switch statement is executed, you need to use the break statement.
5.8.13.The break statement transfers execution out of an enclosing statement.