问题描述
我尝试了以下代码:
var listHippo: MutableList<Hippo> = mutableListOf<Hippo>()
var listAnimal : MutableList<out Animal> = listHippo
我知道这段代码可能会导致问题(如果有人尝试不添加Hippo对象),但是正在编译该代码。
当尝试使用 listAnimal 变量的添加方法时,我没有标准的添加方法,而是使用了一个参数类型为 Nothing 的方法。
我的问题是:
1.为什么在尝试获取有关此方法的信息(Ctrl +鼠标左键)时,为什么要将我带到标准的 add 方法?
2.如果 Nothing 没有构造函数并因此可以启动,如何通过添加方法将 Nothing 对象添加到 MutableList 中?
附上我在IDE中看到的屏幕截图:
解决方法
您不能那样做,如果您添加了不是河马的Animal,那么您将获得RuntimeException,特别是ClassCastException。
正确的方法:
val hippos = mutableListOf<Hippo>()
// Shallow copy all of the elements present in `hippos`
val animals: MutableList<Animal> = hippos.toMutableList()
这样,如果您向动物添加了一些东西,hippos
中存在的列表引用将不会受到影响,因此是有效的。