Scala:不能将抽象通用超类子类化

时间:2016-12-14 14:48:06

标签: scala generics inheritance abstract

我试图在Scala中返回一个抽象泛型类的子类,但它不会编译。我得到类型A的表达式不符合预期的类型B 。 这是我正在使用的代码:

abstract class AA[T](val var1: String){
  def doSomething(): T;
}
class BB(override val var1: String) extends AA[Int](var1){
  override def doSomething(): Int = {
    return 5
  }
}

object Factory {
  def create(v: String) : AA[Any] = {
  return new BB("5") // this is the error
  }
}

create() 的签名应该是什么?

由于

1 个答案:

答案 0 :(得分:1)

BB扩展AA[Int],但Factory.create声明返回AA[Any]。您可以通过AA中的T协变来解决此问题:

abstract class AA[+T](val var1: String){
  def doSomething(): T
}