下面是一段相当标准的Java代码,已经翻译成Scala
val result: ResultSet = statement.executeQuery(query)
while (result.next) {
if (result.getDouble("FIELD") != null) {
}
}
为什么我
警告:使用`!='比较Double和Null类型的值 总是屈服于真的?
答案 0 :(得分:2)
如果我理解正确,那是因为scala中的Double永远不会是空的。
在控制台中尝试一些简单的操作会出现错误:
scala> val d:Double = null
<console>:13: error: type mismatch;
found : Null(null)
required: Double
另一方面,java.lang.Double
可以为空:
scala> val d:java.lang.Double = null
d: java.lang.Double = null
所以你的double可能是Scala Double
而不是Java Double
编辑我戳了一下,看起来好像使用java.sql.ResultSet的getDouble
方法会返回一个scala Double
对象,它会解释警告。至于检查null
的替代方法,我不确定这是否是一种选择。在Java中,该方法返回原始double
,默认为0.0
。我可能错了,但我不认为Java原语可能是null
。
Edit2 删除了一些更多猜测而不是回答的东西。
答案 1 :(得分:2)
问题更多是关于java.sql而不是关于scala。 getDouble返回一个不能为null的double(java)或Double(Scala)。调用getDouble(或其他类似的函数)后,必须调用wasNull来检查该字段是否为null,在这种情况下,必须忽略getDouble返回的值。根据驱动程序的不同,即使字符串可能为null,也可能必须对字符串字段执行此操作。对于空字段,getString可以返回空字符串而不是null。