Ich teste die neuen Schließfunktionen von Java 8; Ich frage mich, warum dieses Stück CodeJava 8 Verschlüsse und Typerkennung
public class Test8 {
private class A { int a;}
private class B { int b;}
interface IFA { void ifa(A param); }
interface IFB { void ifb(B param); }
private void forceA(A expr) { }
private void z(IFA fun) { System.out.println("A"); fun.ifa(new A()); }
private void z(IFB fun) { System.out.println("B"); fun.ifb(new B()); }
public void run() {
z(x -> forceA(x));
}
public static void main(String args[]) { new Test8().run(); }
}
den Fehler gibt: both method z(IFA) in Test8 and method z(IFB) in Test8 match error
auf z Aufruf in der run-Methode
Ist das nicht der Compiler in der Lage zu erkennen, dass die forceA
Aufruf Kräfte x vom Typ zu sein A und damit das richtige z zu verwenden ist z(IFA fun)
?
(eine ähnliche Funktion ist legal in C# Delegaten, ist es eine Möglichkeit, um das gleiche Ergebnis in Java 8 zu bekommen?) Ist
Wenn dies nicht kompiliert, dann ist der Compiler eindeutig nicht schlau genug, um das herauszufinden. –