I am happy to see this move forward as an ordinary RFE, though it would be good to do some corpus searches for `this$0` to gauge how broadly the assumption that inner classes always have this field is.

On 8/2/2021 1:34 PM, Liam Miller-Cushon wrote:
On Sat, Jul 31, 2021 at 12:51 PM Brian Goetz <brian.go...@oracle.com <mailto:brian.go...@oracle.com>> wrote:

    > Another option that gets some of the benefit and doesn't require a
    > spec change is to omit the reference to the enclosing instance
    if it
    > is unused. We've been doing that successfully for a few years at
    > Google. There was some minor compatibility impact to code using
    > reflection to access the synthetic field that stores the
    reference to
    > the enclosing instance, but that was very rare, and the benefit is
    > that it avoids some memory leaks.

    The people who would complain are in a pretty weak position:

      - The field is private and synthetic; you shouldn't be
    reflecting on
    it at all;
      - The field name is an implementation detail of the compiler,
    and not
    specified, so you shouldn't even pretend you know its name;
      - If its your class, the easy thing to do is add an accessor, so
    the
    only people who would complain are those that are breaking into
    classes
    they don't control.

    I think it is reasonable for the language to infer whether the
    enclosing
    instance is "captured" by the inner class or not, and that's
    consistent
    with how lambdas behave.


Thanks, that all sounds right to me.

I filed https://bugs.openjdk.java.net/browse/JDK-8271623 <https://bugs.openjdk.java.net/browse/JDK-8271623> to track that enhancement.

Reply via email to