2

我在 Scala 中使用 JDO 和 DataNucleus 类型安全查询语言。因此,我的代码如下所示:

val id: Long = // something
val cand: QDbObject = QDbObject.candidate()
pm.query[DbObject].filter(cand.id.eq(id))...

简而言之,这将对字段等于的所有DbObjects运行查询。不幸的是,我收到以下警告:idid

NumericExpression[Long] and Long are unrelated: they will most likely 
never compare equal

很明显,Scala 编译器认为这NumericExpression[Long]是使用 的内置定义eq(),类似于==,但由于这是来自 Java,因此该eq()方法与 Scala 的方法完全无关eq()

有没有办法摆脱警告?显然,这会发生很多,我担心这些非警告会隐藏真正的警告。

更新(2013-06-29)

这已在 Scala 2.10.2 中修复。警告消失了。

4

1 回答 1

1

我更担心是否eq会实际调用该方法而不是 Scala 的eq! 但它是。不过,我认为你无法摆脱它。如果您使用的是 Scala 2.10,则可以使用不同的方法调用创建一个隐式值类eq——实际上是同一件事,但警告将仅限于一个文件。

于 2013-03-02T00:22:09.817 回答