Superinterface.this.method()

bitter_fox bitterfoxc at gmail.com
Sun Dec 18 05:44:45 PST 2011


Thank you for the response.

Ok, I wait for development of Extension Methods.

Thanks,
bitter_fox

2011/12/18 maurizio cimadamore <maurizio.cimadamore at oracle.com>

> On 18-Dec-11 3:12 AM, bitter_fox wrote:
>
>> interface A
>> {
>>     public void a() default
>>     {
>>         System.out.println("A");
>>     }
>> }
>>
>> class B implements A
>> {
>>     public void a()
>>     {
>>         A.this.a(); // "A" or StackOverflowError?
>>     }
>> }
>>
> Hi
> The syntax for A.this.a() should be disallowed, as, according to the JLS,
> A should be an enclosing class (which is not the case here). I think it's
> reasonable to expect that the final version of the compiler would give an
> error similar to the one you get today with JDK 5/6/7 if you remove the
> default from A and you make B abstract - the compiler will complain because
> 'A is not an enclosing class'.
>
> What you want here is:
>
> A.super.a()
>
> as described in the latest State of the Lambda draft [1].
> The semantics of A.this/A.super where A is an interface with extension
> methods is still to be correctly implemented by the compiler - so I
> wouldn't rely much on what is/isn't accepted by the compiler as of today.
>
> Thanks
> Maurizio
>
> [1] - http://cr.openjdk.java.net/~**briangoetz/lambda/lambda-**
> state-4.html<http://cr.openjdk.java.net/%7Ebriangoetz/lambda/lambda-state-4.html>
>


More information about the lambda-dev mailing list