考虑以下代码:

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中所述,由于thissuper(与内部类相比)的含义不同,因此在lambda表达式中可行。

The Java® Language Specification, §15.12.1已明确解决了对内部类执行相同操作的可能性:

10-06 09:09