私はいくつかのJavaコードを移植しており、次のものがあります
val overnightChanges: java.util.Hashtable[String, Double] = ...
やってみると
if (null != overnightChanges.get(...))
次の警告が表示されます
警告: `!=' を使用して Null 型と Double 型の値を比較すると、常に true が返されます
私はいくつかのJavaコードを移植しており、次のものがあります
val overnightChanges: java.util.Hashtable[String, Double] = ...
やってみると
if (null != overnightChanges.get(...))
次の警告が表示されます
警告: `!=' を使用して Null 型と Double 型の値を比較すると、常に true が返されます
プリミティブ型と参照型は、java よりも scala の方がはるかに違いが少ないため、名前はすべて大文字で始まるという慣習があります。Double
これはscala.Double
プリミティブ Javadouble
であり、参照ではありませんjava.lang.Double
。
scala で「double または no value」が必要な場合は、Option[Double]
ほとんどの場合使用します。Option には強力なライブラリ サポートがあり、型システムでは、値がない可能性があることを無視できません。ただし、例のように Java と密接に対話する必要がある場合は、テーブルに java.lang.Double が含まれているため、そのように言う必要があります。
val a = new java.util.HashMap[String, java.lang.Double]
コードのいたるところに表示されるようになった場合java.lang.Double
は、インポートすることにより、JDouble にエイリアスできます。
import java.lang.{Double => JDouble}
または定義することによって
type JDouble = java.lang.Double
scala.Double
との間に暗黙的な変換がjava.lang.Double
あるため、相互作用は適度にスムーズになるはずです。ただし、java.lang.Double
おそらく scala/java 相互作用レイヤーに限定する必要があります。scala コードに深く入り込むと混乱するでしょう。
Scala では Double はプリミティブであるため、null にすることはできません。キーが定義されていない場合、デフォルトのプリミティブ値 (ここでは 0.0) が取得されるため、Java マップを直接使用する場合は面倒です。
scala> val a = new java.util.Hashtable[String,Double]()
a: java.util.Hashtable[String,Double] = {}
scala> a.get("Foo")
res9: Double = 0.0
値が String や List などのオブジェクトである場合、コードは期待どおりに動作するはずです。
したがって、問題を解決するには、次のことができます。
contains
外側の if 条件で使用します。scala.collection.JavaConversions
) 。Haskellでは「たぶん」とも呼ばれるScalaの「オプション」を使用します。