2016-12-14 60 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 
}