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 不能扩展,因此排除了 Quantity
从 AnyVal
继承的可能性。为了让具体的 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]
我定义了以下 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 不能扩展,因此排除了 Quantity
从 AnyVal
继承的可能性。为了让具体的 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]