【发布时间】:2013-02-15 11:57:29
【问题描述】:
一个简单的问题。类不可变List的方法::定义为:
密封抽象类List[+A] ...
def ::[B >: A](x: B): 列表[B]
假设我有:
class Fruit
class Mango extends Fruit
scala> val d:List[Fruit] = List.empty[Fruit]
d: List[Fruit] = List()
scala> new Mango :: d
res5: List[Fruit] = List(Mango@272d6774)
现在我在这里感到困惑。根据:: 声明,参数类型应该是逆变的。即在这种情况下,>: Fruit 的任何类(我理解为什么会这样)。但是我不明白的是,Mango <: Fruit,那为什么编译器不抛出错误呢?
【问题讨论】: