package com.test; import java.util.List; 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 y) -> {} case RecordWithInterface(Integer y) when true -> {} case RecordWithInterface(Integer x, D y) when true -> {} case RecordWithInterface(I x, D y) when true -> {} case Integer(double x) -> {} case PrimitiveRecord(Integer x) when true -> {} case PrimitiveRecord(int x) when true -> {} case IntegerRecord(Integer x) when true -> {} case IntegerRecord(int x) when true -> {} case T(Integer x) -> {} } switch (integer){ case PrimitiveRecord(int x) -> {} default -> {} } switch (typedRecord){ case TypedRecord(I x)-> {} default -> {} } switch (typedRecord){ case TypedRecord(C x)-> {} case TypedRecord(I x)-> {} case TypedRecord(Integer t) -> {} case TypedRecord(List nums) -> {} case TypedRecord(List list) -> {} case TypedRecord(T t) -> {} case TypedRecord(String s) -> {} case TypedRecord(var x) -> {} default -> {} } switch (object){ case Top(Child c1, Child(I x, int y)) -> { } case Top(Child c1, Wrong(int y)) -> { } case Top(Child c1, Child(C a, I i)) -> { } default -> {} } } }