Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型lambda不适用于参数_Java_Generics_Lambda - Fatal编程技术网

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;
    }
}