public class Test { private static final String BAZ = "baz"; private void stringSwitch() { final String bar = "bar"; String key = "key"; switch (key) { case "": { System.out.println("Nothing"); break; } case "foo": // fallthrough works as before case bar: // local final variables are ok case BAZ: { // constants are ok System.out.println("Matched key"); break; } default: break; } } private void illegalStringSwitch() { String foo = "foo"; String key = "key"; switch (key) { case <error>foo</error>: case <error>getStringValue()</error>: { System.out.println("illegal"); break; } default: break; } } private String getStringValue() { return ""; } }