据我了解,以下代码应该运行良好。

但是,当我尝试编译时,它在compareTo处失败

public class Test {

    Comparable<?> getMinimum() {
        return null;
    }

    public int getPreviousValue(double nv) {
        return getMinimum().compareTo(nv);
    }
}


所以我的问题是,如果编译失败,为什么会这样-我们不允许将null与double进行比较吗?

最佳答案

这里的问题不是该方法的空结果。

问题在于,编译器不知道如何在compareTo(double)返回的内容上调用getMinimum()

您必须将签名更改为Comparable<Double> getMinimum()才能起作用!如果您的可比对象支持,则只能与特定类型的数字进行比较!

当然,在运行时,您将面对NPE。当然,还有:一些代码检查工具可以在编译时识别出这种特定的NPE情况。

关于java - 空不能比作双-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52330582/

10-11 07:02