Referência de método ao método de interface privada
Considere o seguinte código:
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() {}
}
}
Eu realmente não entendi direito ... eu entendo issotest()
método éprivado. Mas o que muda se convertermos uma classe anônima em sua interface((I)(new I() {}))
? Mais precisamente, eu gostaria de ver um ponto JLS específico que permita esse truque.
P.S. Eu relatei isso como um bug do compilador (ID: 9052217). Parece-me queRunnable test2 = ((new I() {}))::test;
deve ser bem compilado nesse caso específico.
P.P.S. Até agora, foi criado um bug com base no meu relatório:https://bugs.openjdk.java.net/browse/JDK-8194998 . Pode ser que ele seja fechado como "não vai consertar" ou o que for.