通用lambda不适用于参数

时间:2016-05-21 00:37:17

标签: java generics lambda

我有以下代码

public interface PredicateGeneric<T,Z>{
    boolean compare(T t, Z z);
}

然后

PredicateGeneric<Integer,Integer> p= (Integer i, Integer j) -> i>=j;

最后

public static <T,Z> T getInt(Integer a, Integer b, PredicateGeneric<T,Z> p){
    if(p.compare(a,b)==true){
        return a;
    }else{
        return b;
    }
}

该方法由

调用
System.out.println(getInt(4,5,p));

在我的主要方法中。

我在Eclipse中收到以下消息: &#34; PredicateGeneric类型中的方法compare(T,Z)不适用于参数(Integer,Integer)&#34;

我过去曾经遇到过仿制药的麻烦,所以我犯了一个错误让我感到惊讶,但我找不到它。

1 个答案:

答案 0 :(得分:2)

将类型声明更改为:

public static <T,Z> T getInt(T a, Z b, PredicateGeneric<T,Z> p){
    if(p.compare(a,b)==true){
        return a;
    }else{
        return b;
    }
}

但是现在你不能返回a或b,因为他们的类型与声明不匹配。您可以使用a和b声明此方法并返回具有相同类型的值,也可以考虑不同的返回值。