record LongRecord(String s1, String s2, String s3) {} record PrimitiveRecord(int x){} record IntegerRecord(Integer x){} record RecordWithInterface(I x, I y) {} record Top(Child c1, Child c2) {} record Child(I x, I y){} record Wrong(int x) {} sealed interface I permits C, D {} final class C implements I {} final class D implements I {} record TypedRecord(T x) {} public class Incompatible { Object object; Integer integer; TypedRecord typedRecord; void incompatible() { switch (object) { case LongRecord(String s1, int x, int y) -> {} case RecordWithInterface(Integer x, Integer y) s when true -> {} case RecordWithInterface(Integer x, D y) s when true -> {} case RecordWithInterface(I x, D y) s when true -> {} case Integer(double x) -> {} case PrimitiveRecord(Integer x) s when true -> {} case PrimitiveRecord(int x) s when true -> {} case IntegerRecord(Integer x) s when true -> {} case IntegerRecord(int x) s when true -> {} case T(Integer x) -> {} } switch (integer){ case PrimitiveRecord(int x) -> {} default -> {} } switch (typedRecord){ case TypedRecord(I x) s-> {} default -> {} } switch (object){ case Top(Child c1, Child(I x, int y) c3) c -> { } case Top(Child c1, Wrong(int y) c3) c -> { } case Top(Child c1, Child(C a, I i) c3) c -> { } default -> {} } } }