我试图通过使用下限创建新的不可变类型的方法来了解协方差
class ImmutableArray[+T](item: T, existing: List[T] = Nil) {
private val items = item :: existing
def append[S >: T](value: S) = new ImmutableArray[S](value, items)
}
Run Code Online (Sandbox Code Playgroud)
我知道type参数T不能在append方法中使用,因为它违反了规则但是如果我说一个Customer类和子类Student我仍然可以创建类型U Student.
我可以看到这有效,但为什么这不违反规则?我可以理解,如果我有一个Students 列表然后添加了一个Customer我只能返回一个Customers 列表,因为它不允许Customer分配给a,Student因为它是父类型.但为什么我可以使用Student?
我错过了什么?
谢谢布莱尔