在将以下内容从Java翻译为Scala时,为什么会出现“总是会产生真实”的警告?

时间:2011-07-30 05:53:27

标签: java sql scala

下面是一段相当标准的Java代码,已经翻译成Scala

 val result: ResultSet = statement.executeQuery(query)

  while (result.next) {
    if (result.getDouble("FIELD") != null) {

    }
 }

为什么我

  

警告:使用`!='比较Double和Null类型的值   总是屈服于真的?

2 个答案:

答案 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。