Syntax for calling super
John Hendrikx
hjohn at xs4all.nl
Thu Aug 23 01:42:51 PDT 2012
On 23-8-2012 3:35, Brenden Towey wrote:
> True. In that case, I think I prefer your suggestion, super.K.m().
>
> K.super.m() seems to be invoking the super-class of K, not of J. It's a
> little confusing. super.K.m() reads a bit more clearly. "my super
> class" . "oh, this interface K though" . "m()"
Another alternative might be to write it as:
super(K).m();
or even
super(K.class).m();
The general behaviour of super seems to be that it gives you a reference
to the superclass. If it is unclear which one it should 'return', then
passing it a parameter seems fairly natural syntax.
> I can see a case for a cast, but super.K.m() is a convenient shorthand.
> Less typing (and less reading!) is sometimes the better option.
> Something like ((K) super).m() is a bit unnecessarily long.
>
>
> On 8/22/2012 6:28 PM, David Holmes wrote:
>> On 23/08/2012 11:09 AM, Brenden Towey wrote:
>>> On 8/22/2012 3:32 PM, Yuval Shavit wrote:
>>>> To my mind, the syntax "should" be K.m() (without the super). That
>>>> makes
>>>
>>> I'd tend to agree, except for the problems you mention. What about
>>> "J.super.m()"? "Don't call me call my parent class?"
>>>
>>> interface J extends K {
>>> int m() default { return J.super.m(); } // calls J's parent's m()
>>> }
>> The problem with that is that you need to be able to select from
>> multiple parents, so the parent's type has to be in there somewhere.
>>
>> David
>
More information about the lambda-dev
mailing list