我有以下代码
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 中收到以下消息: “PredicateGeneric 类型中的方法 Compare(T,Z) 不适用于参数 (Integer, Integer)”
我过去在使用泛型方面遇到过麻烦,所以我犯了一个错误,但我找不到它,这并不奇怪。
最佳答案
将类型声明更改为:
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 声明此方法并使用相同类型的返回值,也可以考虑不同的返回值。
关于java - 通用 lambda 不适用于参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37357741/