Syntax for calling super
Brian Goetz
brian.goetz at oracle.com
Wed Aug 22 15:13:54 PDT 2012
The syntax was designed to be analogous to the "K.this.m()" syntax that
is used in inner classes.
One problem with the syntax you suggest is that unlike "this", "super"
is not a valid expression.
This would be made worse by the inconsistency it would introduce over
"this"; currently ((K) this) has a meaning, and the role of casting to
an enclosing (K) in that meaning would not be consistent with your
suggestion for ((K) super).
That said, we're not married to the K.super.m() syntax if there is an
obviously better one. On the other hand, we don't dislike the
K.super.m() syntax either.
On 8/22/2012 5:41 PM, Paul Benedict wrote:
> This syntax caught my eye:
>
> interface K {
> int m() default { return 88; }
> }
>
> interface J extends K {
> int m() default { return K.super.m(); }
> }
>
> I really don't think it is is appropriate to code "K.super.m()". An
> natural English reading of "K.super" would be "superclass of K" since
> it is K that is qualified.... but that's not what the code intends to
> be.
>
> I would recommend a casting syntax to make the intention clearer:
> interface J extends K {
> int m() default { return ((K) super).m(); }
> }
>
> Paul
>
More information about the lambda-dev
mailing list