Java 8 Lambda:两个接口与方法具有相同的数字参数

时间:2016-10-19 11:09:07

标签: java lambda java-8

我有两个界面:

interface A {
    public void pull(SomeclassA a, SomeclassB b); 
}

interface B {
    public void make(SomeClassM m, SomeclassN n); 
}

在每个interface中,我有一个具有相同参数数量的方法。然后我有一个使用上述两个接口的方法的类,即:

public class C {

    public void test(B b) {

    }

    public void test(A a) {

    }

}

我需要使用Java 8 lambda表达式的类。 Java如何识别将哪个接口传入此类的方法?

public static void main(String[] args) {
    C c = new C(); 
    c.test(
        (a , b ) ->{

        }
    ); 
}

1 个答案:

答案 0 :(得分:4)

您将收到编译错误,因为编译器无法在两个重载的test方法之间进行选择。

要解决此问题,您必须指定lambda参数的类型。

例如:

public static void main(String[] args) {
    C c = new C(); 
    c.test(
        (SomeClassM a , SomeClassN b) -> {

        }
    ); 
}

将导致test(B b)被选中。