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