【发布时间】:2021-01-21 04:52:53
【问题描述】:
以下代码运行良好:
abstract class Vehicle{
val name:String
}
case class Car(name: String) extends Vehicle
case class Bike(name: String) extends Vehicle
case class Parking[T](vehicle: T)
object Covariance extends App {
def parkMyVehicle(p : Parking[Vehicle]): Unit = println(s"Parking ${p.vehicle.name}")
parkMyVehicle(Parking(Car("Mercedes")))
parkMyVehicle(Parking(Bike("HD")))
}
这有点奇怪,因为Parking 不是协变的。
但是,以下行要求协变 Parking,否则无法编译(这是预期的)。
parkMyVehicle(Parking[Car](Car("Mercedes")))
我的问题是,为什么 parkMyVehicle(Parking(Car("Mercedes"))) 不要求协变 Parking?
【问题讨论】:
标签: scala types type-inference covariance