小编sou*_*ole的帖子

6
推荐指数
1
解决办法
1441
查看次数

协方差的 Scala 编译器行为

以下代码运行完美:

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")))

}
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为Parking不是协变的。

但是,以下行要求 covariant Parking,否则不会编译(这是预期的)。

parkMyVehicle(Parking[Car](Car("Mercedes")))
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么parkMyVehicle(Parking(Car("Mercedes")))不要求 covariant Parking

types scala type-inference covariance

0
推荐指数
1
解决办法
37
查看次数