2

我想定义一个名为 ExtendedNumber 的参数化类,它将采用某种形式的整数,例如 Int 或 Byte 并将其扩展为包括无穷大、-infinity 和 null。特别是,我想用 MaxValue 来表示无穷大。如果 MaxValue 是静态成员,我相信我可以这样做:

class ExtendedNumber[T <: {val MaxValue : T}] {
  val infinity = T.MaxValue
  ...
}

但是,由于 MaxValue 是在伴随对象中定义的,我相信我需要对伴随对象进行类型约束。这可能吗?我也对一般问题的其他解决方案持开放态度。

4

1 回答 1

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
于 2013-02-28T09:58:33.060 回答