class Test { void test(Object o, Integer integer) { switch (o) { case String s when integer -> System.out.println(); default -> {} } switch (o) { case String s when isBool() -> System.out.println(); default -> {} } switch (o) { case Integer i when isInt(): break; default: break; } switch (o) { case Integer i when null: break; default: break; } boolean flag1; switch (o) { case Integer i when flag1 -> System.out.println(1); default -> System.out.println(0); } boolean flag2; switch (o) { case Double d when foo(flag2) -> System.out.println(2); default -> System.out.println(0); } } private native boolean isBool(); private native int isInt(); private native boolean foo(boolean blag); public static void main2(Object o) { int x = switch (o) { case Object _, String _ when o == o -> 4; case Integer _ -> 2; default -> 3; }; } }