Compilation fails because anonymous class constructor formal parameter has inaccessible type

Pawel pawel.veselov at gmail.com
Wed Jul 22 17:12:10 UTC 2015



> On Jul 22, 2015, at 7:03 AM, Georgiy Rakov <georgiy.rakov at oracle.com> wrote:
> 
> 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.

This seems to say that it is the signature of a constructor that shouldn't cause any errors. I believe the error is coming from the access of Test18.v1, as its type can not be accessed. That would fail outside of being used as a constructor argument, so it shouldn't be allowed if used as one either. 

> 
> Thanks,
> Georgiy.
> <Test18.java>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150722/0940942b/attachment-0001.html>


More information about the compiler-dev mailing list