相关疑难解决方法(0)

Java8:lambdas和重载方法的歧义

我正在玩java8 lambdas,我遇到了编译器错误,我没想到.

假设我有一个函数interface A,一个abstract class B和一个class C重载方法,它们可以采用AB作为参数:

public interface A { 
  void invoke(String arg); 
}

public abstract class B { 
  public abstract void invoke(String arg); 
}

public class C {
  public void apply(A x) { }    
  public B apply(B x) { return x; }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以传入一个lambda c.apply,它正确地解决了c.apply(A).

C c = new C();
c.apply(x -> System.out.println(x));
Run Code Online (Sandbox Code Playgroud)

但是当我更改B作为泛型版本的参数的重载时,编译器报告两个重载是不明确的.

public class C {
  public void apply(A x) { …
Run Code Online (Sandbox Code Playgroud)

java generics lambda java-8

38
推荐指数
2
解决办法
7963
查看次数

标签 统计

generics ×1

java ×1

java-8 ×1

lambda ×1