scala.math.ScalaNumber
- это файл Java, который выглядит следующим образом:
public abstract class ScalaNumber extends java.lang.Number {
protected abstract boolean isWhole();
public abstract Object underlying();
}
И scala.math.BigDecimal
реализует это с помощью:
class BigDecimal(val bigDecimal: BigDec, val mc: MathContext)
extends ScalaNumber with ScalaNumericConversions with Serializable {
...
def underlying = bigDecimal
}
, а также scala.math.BigInt
:
class BigInt(val bigInteger: BigInteger) extends ScalaNumber with ScalaNumericConversions with Serializable {
...
def underlying = bigInteger
}
сбивает с толку, underlying
имеет тип java.math.BigDecimal
/ java.math.BigInt
вместо Object
.
Я что-то упускаю из виду или здесь что-то особенное?
РЕДАКТИРОВАТЬ: Конечно, я пропустил что-то очевидное ... С вами все в порядке. Ко-вариантные типы возврата. Спасибо!