我已经定义了以下类层次结构,我想限制要符合 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)
...是否可以重写上述层次结构,以便具体类型是价值类?从文档中,我知道价值类无法扩展,因此将Quantity
从AnyVal
继承而排除。为了使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]