Scala 中值 类 的层次结构?

Hierarchy of value classes in Scala?

我定义了以下 class 层次结构,我想在其中限制类型参数符合 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)

...是否可以重写上述层次结构,使具体类型为值 classes?从文档中我知道值 classes 不能扩展,因此排除了 QuantityAnyVal 继承的可能性。为了让具体的 classes 从 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]