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