我正在测试 Java 8 的新闭包特性;我想知道为什么这段代码
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(); }
}
给出错误: both method z(IFA) in Test8 and method z(IFB) in Test8 match error
在运行方法中的 z 调用
编译器是否无法检测到forceA
调用强制 x 为 A 类型,因此正确使用的 z 是z(IFA fun)
?
(类似的函数在 C# 中使用委托是合法的;有没有办法在 Java 8 中获得相同的结果?)