import java.util.List; class Main { void genericTest(RecordWithGeneric record) { for (RecordWithGeneric(InnerRecord t ) : List.of(record)) { System.out.println(t); } List> lists = List.of(record); for (RecordWithGeneric(InnerRecord t) : lists) { System.out.println(t); } } record RecordWithGeneric(T t) {} record InnerRecord(int x) {} void test1(List list) { for (Record(var x) : list) {} } void test2(List list) { for (PermittedRecord(var x) : list) {} } void test3(List list) { for (PermittedRecord(var x) : list ) {} } void test4(List list) { for (PermittedRecord(var x) : list ) {} } void test5(List list) { for (PermittedRecord(var x) : list ) {} T t = list.get(0); PermittedRecord r = (PermittedRecord) t; } void test6(List list) { for (PermittedRecord(var x) : list) {} } void test7(List list) { for (PermittedRecord(var x) : list) {} } void test8(List list) { for (PermittedRecord(var x) : list) {} } void test9(List list) { for (PermittedRecord(var x) : list) {} } void test10(List list) { for (PermittedRecord(var x) : list) {} } void test11(List list) { for (Record(var x) : list) {} } sealed interface UpperWithPermit permits PermittedRecord {} record PermittedRecord(int x) implements UpperWithPermit {} interface Upper {} record Record(List x) implements Upper {} }