Compilation fails because anonymous class constructor formal parameter has inaccessible type

Georgiy Rakov georgiy.rakov at oracle.com
Wed Jul 22 14:03:17 UTC 2015


Hello,

let's consider following example:

    class Test18_2 {private static class MyClass {}public static MyClass
    v1 = new MyClass();Test18_2(MyClass mc) {}}public class Test18
    {public static void main(String[] args) {new Test18_2(Test18_2.v1){};}}


this example fails to compile on JDK9b73 with following error:

    Error:(9, 34) java: Test18_2.MyClass has private access in Test18_2

However according to my understanding compilation should succeed as per 
assertion jls-15.9.5.1-200:

    Note that it is possible for the signature of the anonymous
    constructor to refer to an inaccessible type (for example, if such a
    type occurred in the signature of the superclass constructor |cs|).
    This does not, in itself, cause any errors at either compile-time or
    run-time.

It seems to be a javac bug. Could you please tell if you agree.

Thanks,
Georgiy.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150722/7a3e509e/attachment.html>
-------------- next part --------------
class Test18_2 {
    private static class MyClass {}
    public static MyClass v1 = new MyClass();
    Test18_2(MyClass mc) {}
}

public class Test18 {
    public static void main(String[] args) {
        new Test18_2(Test18_2.v1){};
    }
}


More information about the compiler-dev mailing list