JDK-8300786 - No longer require super() and this() to appear first in a constructor

Archie Cobbs archie.cobbs at gmail.com
Thu Feb 2 21:49:55 UTC 2023


On Thu, Feb 2, 2023 at 2:16 PM Brian Goetz <brian.goetz at oracle.com> wrote:

> This can be amended to:
>
> An explicit constructor invocation statement introduces an
> _pre-initialization context_, which limits the use of constructs that refer
> to the current object.  Notably, the keywords `this` and `super` are
> prohibited in a pre-initialization context, as are unqualified references
> to instance variables and instance methods of lexically enclosing
> declarations.
>

That might not work. For example, this source is legal (as it should be)
and yet the 'this' keyword appears within the super() call:

$ cat Outer.java
public class Outer {

    public int x;

    public Outer(int x) {
        this.x = x;
    }

    public class Inner extends Outer {
        public Inner() {
            super(Outer.this.x + 10);
        }
    }

    public static void main(String[] args) {
        System.out.println(new Outer(10).new Inner().x);
    }
}
$ java -cp classes Outer
20

What about something like this?

An explicit constructor invocation statement introduces a *pre-initialization
> context*, which includes the prologue of the constructor and the explicit
> constructor invocation statement, and which prohibits the use of constructs
> that refer explicitly or implicitly to the current object. These include
> this or super referring to the current object, unqualified references to
> instance variables or instance methods of the current object, method
> references referring to instance methods of the current object, and
> instantiations of inner classes of the current object's class for which the
> current object is the enclosing instance (§8.1.3).
>

-Archie

-- 
Archie L. Cobbs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-spec-observers/attachments/20230202/99632ccf/attachment-0001.htm>


More information about the amber-spec-observers mailing list