我在Scala中使用JDO和DataNucleus类型安全查询语言。因此,我的代码如下所示:
val id: Long = // something
val cand: QDbObject = QDbObject.candidate()
pm.query[DbObject].filter(cand.id.eq(id))...
简而言之,这会针对DbObject
字段等于id
的所有id
运行查询。不幸的是,我收到以下警告:
NumericExpression[Long] and Long are unrelated: they will most likely
never compare equal
显然,Scala编译器认为NumericExpression[Long]
正在使用eq()
的内置定义,类似于==
,但由于这来自Java,{{1}方法与Scala的eq()
方法完全无关。
有没有办法摆脱警告?显然,这种情况会发生很多,我担心这些非警告会隐藏真正的警告。
更新(2013-06-29)
这已在Scala 2.10.2中修复。警告消失了。
答案 0 :(得分:1)
我更担心是否实际调用eq
方法而不是Scala的eq
!但它是。不过,我认为你不能摆脱它。如果您使用的是Scala 2.10,则可以使用调用eq
的其他方法创建隐式值类 - 它实际上是相同的,但警告将仅限于一个文件。