Receiver parameter of local class constructor

Alex Buckley alex.buckley at oracle.com
Thu Nov 21 17:04:57 PST 2013


If an inner class is a member, then a receiver parameter works fine:

class Top {
   class Inner {
     Inner(Top Top.this) {}
   }
}

but if the inner class is local:

class Top {
   void m() {
     class Inner {
       Inner(Top Top.this) {}
     }
   }
}

then javac (JDK8 b116) gets confused - it thinks Inner is top level:

error: receiver parameter not applicable for constructor of top-level class
       Inner(Top Top.this) {}
                 ^

This is a bug. A local class is a perfectly good inner class - the ctor 
of Top$1Inner.class even takes a Top - so its constructor ought to 
permit a receiver parameter.

Alex


More information about the type-annotations-dev mailing list