【问题标题】:Hierarchy of value classes in Scala?Scala中值类的层次结构?
【发布时间】:2017-04-18 18:16:31
【问题描述】:

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

想法?

【问题讨论】:

  • 您开始的代码不起作用:“无法证明 Long <: double><:< 不包括弱一致性。

标签: scala value-class


【解决方案1】:

有可能,但正如我在评论中所说:&lt;:&lt;&lt;: 不包括弱一致性,所以基本上只有Quantity[Double] 可以存在。

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

case class ContinuousQuantity(value: Double) extends AnyVal with Quantity[Double]

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多