В Java я могу работать с Number как тоКак работать с числовым типом scala?
public void myFunction(Number number) {
double innerVar = 1.0; //initial value
if (number != null) {
innerVar += number.doubleValue();
}
//do other logic
}
Если мне нужно работать с Integer
я могу заменить doubleValue
код с intValue
.
Но scala.math.Numeric не имеет таких методов, как toDouble(x:T)
Я не знаю, что здесь представляет x:T
. Также, если вы видите scala.Double
или scala.Short
, у них есть метод toDouble
, но эти методы не наследуются от одного признака.
можно использовать поиск по шаблону, но есть много дублирования кода с toDouble
:
val myNum:AnyVal = ...
var innerDouble = 1.0
myNum match {
case Double => innerDouble + myNum
case Short => innerDouble.toDouble + myNum
case Int => innerDouble.toDouble + myNum
}
или другой вариант
val myNum:AnyVal = ...
var innerDouble = 1.0
myNum match {
case Double | Short | Int | Long => innerDouble.toDouble + myNum
case _ =>
}
Так как есть лучший способ работы с работой с Числовые типы с Scala?
P.S.
Я читал о границах обзора в scala как <% double
, но не знаю, как их можно использовать при сопоставлении с образцом.
ОБНОВЛЕНО
Here похож вопрос, но это о классах и параметров в ней, мне нужно решение для использования при сопоставлении с образцом.
Проверьте этот другой вопрос здесь: http://stackoverflow.com/questions/17999409/scala-equivalent-of-javas-number – anquegi
Проверено, но не понятно, как его использовать при сопоставлении с образцом. :( – Cherry
@Cherry Точка использования 'Numeric' заключается в том, что вам не нужно использовать сопоставление шаблонов, чтобы добавить' myNum' в 'innerDouble'. –