2016-12-14 61 views
0

我想在Scala中返回抽象泛型类的子类,但它不会编译。我得到A型的表达不符合预期的B型。 这里是代码我使用:Scala:不能继承抽象泛型超类

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 
    } 
} 

应该是什么的签名创建()

感谢

+0

无关您的问题,但请注意,你不需要'return',不需要分号 –

回答

1

BB延伸AA[Int]Factory.create要求返回一个AA[Any]。您可以通过AA协在T解决这个问题:

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