java - 通用 lambda 不适用于参数

标签 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 中收到以下消息: “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/

相关文章:

c# - 从泛型类中的接口(interface)继承

Java Stream - 在过滤器中抛出异常并返回列表

java - 如何使用 rjava 在 R 中调用 String[][]

Java.io在Debian

java - android HTTP POST 失败

Java 8 Streams.reduce() 与组合器

c# - 在 C# 中使用 lambda 获取嵌套列表中的特定元素

java - hibernate和Spring boot的问题

c# - 从类创建数据表(不是实例列表)

c++ - 汇总来自多个捐助者的捐款