1

我已经定义了以下类层次结构,我想将类型参数限制为符合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一个特征,这很好,但是我丢失了类型参数上的逆变注释。

想法?

4

1 回答 1

4

这是可能的,但正如我在评论中所说:<:<并且<:不包括弱一致性,所以基本上只能Quantity[Double]存在。

sealed trait Quantity[-T <: Double] extends Any { 
  protected[this] def value: T 
}

case class ContinuousQuantity(value: Double) extends AnyVal with Quantity[Double]
于 2016-12-04T11:41:23.260 回答