6.3.2 类型投影

前面介绍过MutableList是不变的,可读可写,没有使用in、out修饰。

如果对MutableList的参数类型使用in或者out修饰,会发生什么情况呢?下面的代码说明了一切:

使用out时会报错,因为该参数只能出现在方法的返回类型中。而使用in时编译可以通过,因为该参数只能出现在方法的入参中。

此时,list2和list3分别表示一个受限制的MutableList。在Kotlin中,这种行为被称为类型投影。其主要作用是对参数进行限定,避免不安全操作。

正是由于list3是一个受限制的MutableList,因此将它赋值给list4报错是可以理解的。