【发布时间】:2018-09-12 17:37:54
【问题描述】:
考虑这段代码:
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() 调用其超级函数A.super.doA()。
我可以在 B 类型的 lambda 中调用 A.super.doA() 就好了。但我无法弄清楚调用A.super.doA() 的语法
在匿名B 内。请参阅注释掉的代码。
有什么想法吗?
【问题讨论】:
-
似乎不可能。一种解决方法是在匿名类之外的字段中捕获它: private Runnable runnable = A.super::doA;然后在匿名类中使用。
标签: java java-8 super anonymous-class default-method