【发布时间】:2016-11-28 06:41:48
【问题描述】:
我想创建一个函数,它采用输入类型S,其中S <: ParentClass 和S 也继承SomeTrait。我使用S <: ParentClass with SomeTrait 创建了一个解决方案,它编译得很好,但是它拒绝满足这些条件的输入。
abstract class Units[T](v: T) { def getVal = v}
trait Dimension
trait Time extends Dimension
trait Quantity[T <: Dimension]
trait Instance[T <: Dimension] {
def plus[S <: Units[_] with Quantity[T]](q: S)
}
case class Seconds(v: Double) extends Units(v) with Quantity[Time] {
}
case class Timestamp(i: Int) extends Units(i) with Instance[Time] {
def plus[T <: Units[_] with Quantity[Time]](quantity: T) = Timestamp(2345/*placeholder value*/)
}
当我尝试使用这个时:
Timestamp(5).plus(Seconds(4))
我得到错误:
<console>:46: error: inferred type arguments [Seconds] do not conform to method plus's type parameter bounds [T <: Units[_] with Quantity[Time]]
Timestamp(5).plus(Seconds(4))
^
<console>:46: error: type mismatch;
found : Seconds
required: T
Timestamp(5).plus(Seconds(4))
额外问题:如何获取具有该类型的项目的值,如代码所示?
【问题讨论】: