Syntax for calling super

David Holmes david.holmes at oracle.com
Wed Aug 22 18:01:46 PDT 2012


On 23/08/2012 8:13 AM, Brian Goetz wrote:
> The syntax was designed to be analogous to the "K.this.m()" syntax that
> is used in inner classes.

But the semantics are quite different. K.this is a reference to a
completely different object (the enclosing instance from class K). 
Whereas as K.super is meant to infer something about 'this'.

If anything I think super.K.m() is more natural as an extension to the 
existing super.m() notation.

David
-----

> 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