我试图在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() 的签名应该是什么?
由于
答案 0 :(得分:1)
BB
扩展AA[Int]
,但Factory.create
声明返回AA[Any]
。您可以通过AA
中的T
协变来解决此问题:
abstract class AA[+T](val var1: String){
def doSomething(): T
}