据我所知,下面的代码运行正常。
但是,当我尝试编译时,它在compareTo
失败了
public class Test {
Comparable<?> getMinimum() {
return null;
}
public int getPreviousValue(double nv) {
return getMinimum().compareTo(nv);
}
}
所以我的问题是为什么编译失败 - 我们不允许将null与double进行比较?
这里的问题不是该方法的null结果。
问题是编译器不知道如何在你的compareTo(double)
返回的东西上调用getMinimum()
。
您必须将签名更改为Comparable<Double> getMinimum()
才能使其正常工作!如果您的Comparable支持,您只能与特定类型的数字进行比较!
当然,在运行时,您将面临NPE。当然还有:一些代码检查工具可以在编译时识别这种特定的NPE情况。
编译器在Comparable<?>
感到困惑。制作特定类型的Comparable
(在你的情况下为Double
)以使编译器满意。 :)
public class Test {
Comparable<Double> getMinimum() {
return null;
}
public int getPreviousValue(double nv) {
return getMinimum().compareTo(nv);
}
}
你没有nullpointer,你在使用参数double NOT Double调用compareTo时遇到问题!