I.super.f() usage in Java 8

Boaz Nahum boaznahum at gmail.com
Fri Sep 12 15:26:16 UTC 2014


So class J, even not override 'f' hide what was before a public method.

So to get around I need to (suppose T is mine)

interface Was_I extends  I {

   default int was_f() { return I.super.f(); }

}

class J implements I { }
class T extends J implements Was_I {
        public int f() {
                return Was_I.super.was_f();
        }
}

I understand that if J implements f than this rule make sense.

Not sure I like this bug to be fixed :(

R.

Boaz
On Sep 11, 2014 8:22 PM, "Maurizio Cimadamore" <
maurizio.cimadamore at oracle.com> wrote:

> Hi John,
> yes - this appears to be a bug; I filed this as:
>
> https://bugs.openjdk.java.net/browse/JDK-8058244
>
> Thanks
> Maurizio
>
>
> On 11/09/14 16:53, John Spicer wrote:
>
>> Java 8 supports a new user of super:
>>
>> interface I {
>>         default int f(){return 0;}
>> }
>>
>> class X implements I {
>>         public int f() {
>>                 return I.super.f();
>>         }
>> }
>>
>> This is described in 15.12.1.
>>
>> However, there is wording in 15.12.1 that says:  Let T be the type
>> declaration immediately enclosing the method invocation. It is a
>> compile-time error if Iis not a direct superinterface of T, or if there
>> exists some other direct superclass or direct superinterface of T, J, such
>> that J is a subtype of I.
>>
>> That would seem to require an error on this case, because T has a
>> superclass of J, which is a subtype of I.
>>
>> interface I {
>>          default int f(){return 0;}
>> }
>> class J implements I { }
>> class T extends J implements I {
>>          public int f() {
>>                  return I.super.f();
>>          }
>> }
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20140912/df38ae53/attachment-0001.html>


More information about the compiler-dev mailing list