test/tools/javac/lambda/MethodReference64.java

Thu, 31 Aug 2017 15:17:03 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:17:03 +0800
changeset 2525
2eb010b6cb22
parent 0
959103a6100f
permissions
-rw-r--r--

merge

     1 /*
     2  * @test /nodynamiccopyright/
     3  * @bug 8008540 8008539 8008538
     4  * @summary Constructor reference to non-reifiable array should be rejected
     5  * @compile/fail/ref=MethodReference64.out -XDrawDiagnostics MethodReference64.java
     6  */
     7 class MethodReference64 {
     8     interface ClassFactory {
     9         Object m();
    10     }
    12     interface ArrayFactory {
    13         Object m(int i);
    14     }
    16     @interface Anno { }
    18     enum E { }
    20     interface I { }
    22     static class Foo<X> { }
    24     void m(ClassFactory cf) { }
    25     void m(ArrayFactory cf) { }
    27     void testAssign() {
    28         ClassFactory c1 = Anno::new; //error
    29         ClassFactory c2 = E::new; //error
    30         ClassFactory c3 = I::new; //error
    31         ClassFactory c4 = Foo<?>::new; //error
    32         ClassFactory c5 = 1::new; //error
    33         ArrayFactory a1 = Foo<?>[]::new; //ok
    34         ArrayFactory a2 = Foo<? extends String>[]::new; //error
    35     }
    37     void testMethod() {
    38         m(Anno::new); //error
    39         m(E::new); //error
    40         m(I::new); //error
    41         m(Foo<?>::new); //error
    42         m(1::new); //error
    43         m(Foo<?>[]::new); //ok - resolves to m(ArrayFactory)
    44         m(Foo<? extends String>[]::new); //error
    45     }
    46 }

mercurial