Question

I'm using JDO with the DataNucleus typesafe query language in Scala. I therefore have code that looks like this:

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

In a nutshell, this runs a query for all the DbObjects whose id field is equal to id. Unfortunately, I get the following warning:

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

Clearly, the Scala compiler thinks that NumericExpression[Long] is using the built-in definition of eq(), which is similar to ==, but since this comes from Java, the eq() method has absolutely nothing to do with Scala's eq() method.

Is there any way to get rid of the warning? Obviously, this is going to happen a lot and I'm afraid these non-warnings will hide real warnings.

Update (2013-06-29)

This was fixed in Scala 2.10.2. The warnings are gone.

Was it helpful?

Solution

I was more concerned whether the eq method would actually be called instead of Scala's eq! But it is. I don't think you can get rid of it, though. If you are using Scala 2.10, you can create an implicit value class with a different method calling eq -- it will be effectively the same thing, but the warning will be limited to one file.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top