import java.lang.String; import java.lang.Integer; sealed interface List permits LinkedElem, Elem {} public record LinkedElem(T a,List l) implements List{} public record Elem(T c) implements List{} //Wie gehe ich mit Type Erasure durch den Compiler um? Elemente werden wegen Generics immer zu Object umgewandelt, default Case muss also auch vom Type Object sein. //Dadurch entsteht folgendes Constraint: java.lang.Integer <. T, das nicht aufgelöst werden kann. public class GenericRecordSwitchCase { public main(o) { return switch(o) { case LinkedElem(a, Elem(e)) -> a ; case LinkedElem(a, LinkedElem(e, Elem(f))) -> a; default -> null; }; } }