我有一個(Scala的)對象分層結構,如下所示:Scala的類型不匹配(Java的定義的類類是在類型T不變)
class Vehicle {
...
}
class Car extends Vehicle {
...
}
class Motorcycle extends Vehicle {
...
}
等我有,需要一個方法中的一些輸入並返回Vehicle
子類的類類型那就是「最適合它」:
def chooseVehicleType(fizz : String) : Class[_ <: Vehicle] = {
fizz match {
case "buzz" => classOf[Car]
case "foo" => classOf[Motorcycle]
// etc.
case _ => throw new UnsupportedOperationException(s"We don't support ${fizz} yet.")
}
}
這裏的問題是,我上classOf
分配編譯器錯誤:
類型不匹配;找到:Classcom.me.myapp.model.Car required:Class [com.me.myapp.model.Vehicle] 注意:com.me.myapp.model.Car <:com.me.myapp.model.Vehicle,但Java定義的類類在類型T中是不變的。您可能希望研究通配符類型,如_ <:com.me.myapp.model.Vehicle。 (SLS 3.2.10)
有關這裏發生了什麼的任何想法,以及該修復程序是什麼?
不,這個代碼你不能得到這個錯誤(除非你在「等」中的某個地方返回'Car'而不是'Class')。 –