Hi Archie, I think this rule makes sense - Local1 can capture local variables in the outer class initializer, in which case the error will be legitimate. The extra otherwise does not fix this issue. Adding a special case to allow no-capture local classes to be used in more nested static contexts seems overkill and error-prone.
Chen On Tue, Dec 10, 2024, 3:57 PM Archie Cobbs <[email protected]> wrote: > The proposed JLS changes for JEP 492 are saying that this example should > no longer compile*: > > static { > class Local1 { > class Local2 { > public static void m() { > new Local1(); // error > } > } > } > } > > but that seems wrong - that exampple has been allowed since JDK-8254321, > and as it has nothing to do with flexible constructors, it should continue > to be allowed. > > The JEP 492 spec says (new additions in bold): > > If *C* is an inner local class, then: > > - > > If *C* occurs in a static context, then *i* has no immediately > enclosing instance. *Let S be the nearest static method declaration, > static field declaration, or static initializer that encloses the > declaration of C. If the nearest static method declaration, static field > declaration, or static initializer that encloses the class instance > creation expression is not S, then a compile-time error occurs.* > > Should there be an *Otherwise* at the beginning of the newly added > sentence? (And same thing in the previous paragraph regarding anonymous > classes) > > -Archie > > * See JDK-8345953 <https://bugs.openjdk.org/browse/JDK-8345953> JEP 492: > instantiating local classes in a different static context should not be > allowed > > -- > Archie L. Cobbs >
