Java 泛型lambda不适用于参数
我有以下代码Java 泛型lambda不适用于参数,java,generics,lambda,Java,Generics,Lambda,我有以下代码 public interface PredicateGeneric<T,Z>{ boolean compare(T t, Z z); } 在我的主要方法中 我在Eclipse中得到以下消息: 类型PredicateGeneric中的方法compare(T,Z)不适用于参数(整数,整数) 我过去在泛型方面遇到过麻烦,所以我犯了一个错误并不奇怪,但我找不到它。将类型声明更改为: public static <T,Z> T getInt(T a, Z b
public interface PredicateGeneric<T,Z>{
boolean compare(T t, Z z);
}
在我的主要方法中
我在Eclipse中得到以下消息:
类型PredicateGeneric中的方法compare(T,Z)不适用于参数(整数,整数)
我过去在泛型方面遇到过麻烦,所以我犯了一个错误并不奇怪,但我找不到它。将类型声明更改为:
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;
}
}
public static T getInt(ta,zb,谓词能p){
如果(p.比较(a,b)=真){
返回a;
}否则{
返回b;
}
}
但是现在不能返回a或b,因为它们的类型与声明不匹配。您可以使用a和b声明此方法,并使用相同类型的返回值或考虑不同的返回值。将类型声明更改为:
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;
}
}
public static T getInt(ta,zb,谓词能p){
如果(p.比较(a,b)=真){
返回a;
}否则{
返回b;
}
}
但是现在不能返回a或b,因为它们的类型与声明不匹配。您可以使用a和b声明此方法,并使用相同类型的返回值或考虑不同的返回值。您的意思是
p。比较(a,b)…
?为什么getInt
generic?是的,我的意思是p.compare(a,b)。谢谢,好的。谢谢你的第二个问题(“为什么getInt是泛型的?”),这个方法只被称为getInt。我用它来试验lambda表达式。你提出了一个完美的问题,而通用的方法真的不是很明智。通过使用泛型参数添加/替换参数修复了该问题,现在它可以像我想象的那样工作了—在任何地方都不写==true
。由于这种比较的左侧必须是一个boolean
表达式,因此只需使用该boolean
表达式,而不必使用分散注意力的卷曲,即if(p.compare(a,b))…
。但是,在这种情况下返回p.compare(a,b)?a:b代码>无论如何都足以表达您的意图。请注意,现在已经有人在做你的谓词神经的事情了。你是说p.compare(a,b)…
?为什么getInt
generic?是的,我的意思是p.compare(a,b)。谢谢,好的。谢谢你的第二个问题(“为什么getInt是泛型的?”),这个方法只被称为getInt。我用它来试验lambda表达式。你提出了一个完美的问题,而通用的方法真的不是很明智。通过使用泛型参数添加/替换参数修复了该问题,现在它可以像我想象的那样工作了—在任何地方都不写==true
。由于这种比较的左侧必须是一个boolean
表达式,因此只需使用该boolean
表达式,而不必使用分散注意力的卷曲,即if(p.compare(a,b))…
。但是,在这种情况下返回p.compare(a,b)?a:b代码>无论如何都足以表达您的意图。请注意,已经有人在做你的PredicateGeneric
所要做的事情了。当然,你可以强制两种类型相同,例如T getInt(ta,tb,PredicateGeneric p)
或者你关注int值,正如方法名称所示,Integer getInt(Integer a,Integer b,PredicateGeneric p)
当然,您可以强制这两种类型相同,例如T getInt(ta,tb,PredicateGeneric p)
或者您关注int值,正如方法名称所示,Integer getInt(Integer a,Integer b,PredicateGeneric p)
System.out.println(getInt(4,5,p));
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;
}
}