Java 8の新しいクロージャ機能をテストしています。 runメソッドにおけるzの呼び出しにboth method z(IFA) in Test8 and method z(IFB) in Test8 match error
Java 8のクロージャとタイプの認識
はforceA
呼び出し力xは型であることを検出することができ、コンパイラではない:コード
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(); }
}
のこの作品は、エラーになりますなぜ私は思ったんだけどAと使用する正しいzはz(IFA fun)
ですか?
(同様の機能は、デリゲートを使用してC#で合法であるジャワ8に同じ結果を得るための方法はありますか?)
これがコンパイルされない場合、コンパイラは明らかにそれを理解するのに十分スマートではありません。 –