Search code examples
javagenericsinheritancejavac

Inheriting static protected inner class, wrong complaint by javac


Consider this code:

Base.java

package package1;

public class Base<I extends Base.Inner>{
    protected static class Inner{}
}

Derived.java

package package2;

public class Derived extends Base<Derived.Inner>{
    static class Inner extends Base.Inner{}
}

The base class compiles without problems. The compilation of the derived class fails, the first error being

Derived.java:6: error: Inner has protected access in Base
   public static class Inner extends Base.Inner{}
                                         ^

I don't see a mistake in the code. Explain this, please. JDK 1.8.0_40


Solution

  • This was a javac bug fixed in version 9.