我想定义一个名为ExtendedNumber的参数化类,它将采用某种形式的整数,如Int或Byte,并扩展它以包含无穷大,-infinity和null。特别是,我想使用MaxValue来表示无穷大。如果MaxValue是静态成员,我相信我可以这样做:
class ExtendedNumber[T <: {val MaxValue : T}] {
val infinity = T.MaxValue
...
}
但是,由于MaxValue是在伴随对象中定义的,我相信我需要在伴随对象上放置一个类型约束。这可能吗?我也对一般问题的其他解决方案持开放态度。
答案 0 :(得分:3)
一般解决方案是添加类型类,例如:
trait ExtendedNumber[T] {
def infinity: T
}
implicit object extendedInt extends ExtendedNumber[Int] {
def infinity = Int.MaxValue
}
def foo[T](v: T)(implicit en: ExtendedNumber[T]) = v == en.infinity