Scala中价值类的层次结构



我已经定义了以下类层次结构,我想限制要符合 Double的类型参数...

sealed abstract class Quantity[-T](value: T)(implicit ev: T <:< Double)
case class DiscreteQuantity(value: Long) extends Quantity[Long](value)
case class ContinuousQuantity(value: Double) extends Quantity[Double](value)

...是否可以重写上述层次结构,以便具体类型是价值类?从文档中,我知道价值类无法扩展,因此将QuantityAnyVal继承而排除。为了使AnyVal继承的具体类,我需要使Quantity成为一个特征,这很好,但是我在类型参数上失去了相反的注释。

想法?

这是可能的,但是正如我在评论中所说的: <:<<:不包括弱符号,因此基本上只有 Quantity[Double]可以存在。

sealed trait Quantity[-T <: Double] extends Any { 
  protected[this] def value: T 
}
case class ContinuousQuantity(value: Double) extends AnyVal with Quantity[Double]

最新更新