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