2016-12-04 152 views
1

我已經定義了下面的類層次結構,我要限制的類型參數是舒適與Double ...Scala中的值類的層次結構?

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成爲一個特性,這很好,但是隨後我在類型參數上丟失了反變量註釋。

想法?

+0

您從開始的代碼不起作用:「無法證明Long <:

回答

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]