2013-03-02 3 views
2

Я использую JDO с типом языка запросов DataNucleus в Scala. Поэтому у меня есть код, который выглядит следующим образом:. Eq вызывает предупреждение. Как я могу избавиться от него?

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, метод eq() имеет абсолютно не имеет никакого отношения к методу Scala eq().

Есть ли способ избавиться от предупреждения? Очевидно, это произойдет много, и я боюсь, что эти предупреждения не будут скрывать настоящие предупреждения.

Обновление (2013-06-29)

Это было зафиксировано в Scala 2.10.2. Предупреждения исчезли.

+1

Я бы назвал это ошибкой. Даже если вы включаете 'eq' в back-ticks (трудно показать в комментарии, я думаю ...), который должен удалить любое особое значение, которое язык Scala придает любому данному символу, вы получаете такую ​​же диагностику. –

+0

Где я могу спросить, действительно ли это ошибка/сообщить об этом? – TOB

+1

JIRA Scala находится по адресу https://issues.scala-lang.org/secure/Dashboard.jspa. –

ответ

1

Меня больше волновало, действительно ли будет называться метод eq вместо Scala's eq! Но это. Я не думаю, что вы можете избавиться от этого. Если вы используете Scala 2.10, вы можете создать неявный класс значений с помощью другого метода, вызывающего eq - это будет фактически то же самое, но предупреждение будет ограничено одним файлом.

+1

Как очень раздражает! Scala нуждается в эквиваленте @SuppressWarnings. Я собираюсь удержаться, чтобы дать вам чек на день или два, надеясь, что кто-то знает что-то, чего у вас нет (что, на основе предыдущих ответов, вряд ли). – TOB

+0

@TOB: Я считаю, что Scala не должно генерировать это предупреждение, если зарезервированное слово 'eq', заключено в обратные тики. –

+0

Не генерируйте предупреждение, если реализация .eq исходит из класса, отличного от Scala. – pedrofurla

Смежные вопросы