空无法比较双 - 为什么?

问题描述 投票:0回答:3

据我所知,下面的代码运行正常。

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

public class Test {

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

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

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

java comparable
3个回答
3
投票

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

问题是编译器不知道如何在你的compareTo(double)返回的东西上调用getMinimum()

您必须将签名更改为Comparable<Double> getMinimum()才能使其正常工作!如果您的Comparable支持,您只能与特定类型的数字进行比较!

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


2
投票

编译器在Comparable<?>感到困惑。制作特定类型的Comparable(在你的情况下为Double)以使编译器满意。 :)

public class Test {

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

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

1
投票

你没有nullpointer,你在使用参数double NOT Double调用compareTo时遇到问题!

© www.soinside.com 2019 - 2024. All rights reserved.