I.super.f() usage in Java 8
John Spicer
jhs at edg.com
Thu Sep 11 15:53:35 UTC 2014
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();
}
}
Is this a javac bug or am I misunderstanding the rule?
Thanks,
John.
More information about the compiler-dev
mailing list