11/*
22 * @test /nodynamiccopyright/
33 * @summary
4- * @enablePreview
5- * @compile AssignmentNR1S.java
6- * @run main AssignmentNR1S
4+ * @compile/fail/ref=AssignmentNR1S.out -XDrawDiagnostics AssignmentNR1S.java
5+ * @compile --enable-preview --source ${jdk.version} AssignmentNR1S.java
6+ * @run main/othervm --enable-preview AssignmentNR1S
77 */
88import java .util .Objects ;
9+ import java .util .List ;
910
1011public class AssignmentNR1S {
1112 public static void main (String [] args ) {
1213 method0 ();
1314 method1 ();
1415 method2 ();
16+ method3 ();
1517 method4 ();
1618 method5 ();
19+ method6 ();
1720 }
1821
1922 static sealed abstract class SA1 permits SB1 {}
@@ -31,30 +34,42 @@ static SB1 method2() {
3134 SA1 sa = new SB1 ();
3235 return sa ; // ok
3336 }
34- // <T extends SA1> void method3(T t) { // TODO
35- // SB1 sb = t; // ok
36- // }
3737
3838 static sealed abstract class SA2 <T > permits SB2 {}
3939 static final class SB2 <T > extends SA2 <T > {}
40- static <T > void method4 () {
40+ static <T > void method3 () {
4141 SA2 <T > sa = new SB2 <>(); // WRC, OK
4242 SB2 <T > sb = sa ;
4343 }
4444
4545 static record R1 (int x ) implements IR {}
4646 static sealed interface IR {}
47- static void method5 () {
47+ static void method4 () {
4848 IR ir = new R1 (42 );
49- R1 (int x ) = ir ; // OK
5049 R1 r1 = ir ; // OK
5150 }
5251
52+ static sealed interface IFoo permits FooImpl {}
53+ static final class FooImpl implements IFoo {}
54+ static void method5 () {
55+ IFoo f = new FooImpl ();
56+ FooImpl fi = new FooImpl ();
57+ fi = f ; // OK
58+ }
59+
60+ static void method6 () {
61+ List <IFoo > fs = List .of (new FooImpl (), new FooImpl ());
62+ int count = 0 ;
63+ for (FooImpl fi : fs ) {
64+ count ++;
65+ }
66+ assertEquals (2 , count );
67+ }
68+
5369 static void assertEquals (Object expected , Object actual ) {
5470 if (!Objects .equals (expected , actual )) {
5571 throw new AssertionError ("Expected: " + expected + "," +
5672 "got: " + actual );
5773 }
5874 }
5975}
60-
0 commit comments