对私有接口方法的方法引用
请考虑以下代码:
public class A {
public static void main(String[] args) {
Runnable test1 = ((I)(new I() {}))::test; // compiles OK
Runnable test2 = ((new I() {}))::test; // won't compile
}
interface I {
private void test() {}
}
}
我真的不明白这一点...我知道这种方法是私有的。但是,如果我们将一个匿名类强制转换为其接口,会发生什么变化?更确切地说,我希望看到一个特定的JLS点,允许这个技巧。test()
((I)(new I() {}))
附言我已将其报告为编译器的错误(ID:9052217)。在我看来,在这种特殊情况下应该很好地编译。Runnable test2 = ((new I() {}))::test;
附言到目前为止,根据我的报告创建了一个错误:https://bugs.openjdk.java.net/browse/JDK-8194998。它可能是关闭为“不会修复”或其他什么。