public class Switches { enum E { A, B } int testReachability(E e) { switch (e) { case E d when d == E.A: return 1; case A: return -1; case B: return -2; } return 1; } sealed interface T { } final class T1 implements T { } final class T2 implements T { } void testReachability2(T i) { switch (i) { case T1 f: throw new RuntimeException(); case T2 s: throw new RuntimeException(); } System.out.println(); } class Reachability2{ sealed interface T{} final class T1 implements T{} int test(T t) { switch (t) { case T1 t1: return 2; } } } }