gpt4 book ai didi

java - 泛型类中 lambda 赋值不兼容的操作数类型 double 和 T

转载 作者:行者123 更新时间:2023-12-01 11:06:09 25 4
gpt4 key购买 nike

考虑这个类:

public class TestClass<T> {

@FunctionalInterface
private interface CheckParam<T> {
public boolean check(T newParam);
}

private CheckParam<T> checkCall;

public TestClass() {
checkCall = (newParam) -> someDoubleMethod() == newParam;
//checkCall = (newParam) -> someLongMethod() == newParam;
}

public double someDoubleMethod() {
return 0;
}

public long someLongMethod() {
return 0L;
}
}

TestClass 可以用 DoubleLong 实例化。

编译器为该行给出了不兼容的操作数类型 double 和 T:

checkCall = (newParam) -> someDoubleMethod() == newParam;

如何将 checkCall 字段分配给不同的 lambda 类型?

最佳答案

好吧,您不能使用 ==double (原始类型,而不是 Double)与引用(对象)类型进行比较。将方法返回类型更改为自动装箱可以解决编译问题(至少对我而言,但在我的情况下,您的第一行 lambda 行也无法编译):

   public Double someDoubleMethod() {
return 0.0;
}

public Long someLongMethod() {
return 0L;
}

编辑:但是,在 Java 中通过 == 比较 Double/Long 实例并不是一个好主意,您的评论表明您也无法更改签名。如何更改这些 lambda 以使用 equals 来代替?

    public TestClass() {
checkCall = (newParam) -> newParam.equals(someDoubleMethod());
checkCall = (newParam) -> newParam.equals(someLongMethod());
}

public double someDoubleMethod() {
return 0;
}

public long someLongMethod() {
return 0L;
}

关于java - 泛型类中 lambda 赋值不兼容的操作数类型 double 和 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32927699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com