Scala-通用类型不进行类型检查

时间:2019-02-01 22:20:36

标签: scala generics typechecking

我试图理解实现泛型的错误。我有一个特征,其限定一个返回与结合该性状的上部类型的引用的方法。如何过一个变种参考性状的实现没有键入带有校验Expression of type Capability[Class] doesn't conform to expected type Capability[Trait]

代码如下:

trait IAITask {
  def taskTypeReference[T >: IAITask]: Capability[T]
}

object Tasks {
   var Walk: Capability[Walk] = _
}

class Walk extends IAITask {
  override def taskTypeReference[T >: IAITask]: Capability[IAITask] = Tasks.Walk //This line does not type check
}

1 个答案:

答案 0 :(得分:1)

如果它是Java接口,那么您可能想尝试通过通配符来模仿Java的使用站点差异:

trait Capability[A]

trait IAITask {
  def taskTypeReference: Capability[_ <: IAITask]
}

object Tasks {
   var Walk: Capability[Walk] = _
}

class Walk extends IAITask {
  override def taskTypeReference: Capability[_ <: IAITask] = Tasks.Walk
}