考虑以下代码:
interface A {
default void doA() {
System.out.println("a");
}
}
interface B {
void doB();
}
class Test implements A {
@Override
public void doA() {
// Works
B b = () -> A.super.doA();
b.doB();
// Does not compile
/*
new B() {
public void doB() {
A.super.doA();
}
}.doB();
*/
}
public static void main(String[] args) {
new Test().doA();
}
}
这是人为设计的,但基本上
Test::doA()
尝试将this
包装为B
,并让B::doB()
调用其 super 函数A.super.doA()
。我可以在类型为
A.super.doA()
的lambda中调用B
很好。但是我不知道调用A.super.doA()
的语法在匿名
B
中。参见注释掉的代码。有任何想法吗?
最佳答案
如this answer中所述,由于this
和super
(与内部类相比)的含义不同,因此在lambda表达式中可行。
The Java® Language Specification, §15.12.1已明确解决了对内部类执行相同操作的可能性: