Kotlin中为何可将MutableList参数传入接收List的类?
为什么MutableList可以传给接收List的构造方法?
这其实是Kotlin集合体系设计里的一个核心特性——只读集合与可变集合的继承关系在起作用,我来给你拆解清楚:
Kotlin集合的层级关系
在Kotlin中,MutableList<T>是直接继承自List<T>的接口。也就是说,所有可变列表的实例,同时也是只读列表的实例。这种子类型关系允许你将MutableList对象直接赋值给List类型的变量,或者传递给接收List参数的方法——就像你代码里把allList传给CustomAdapter的构造方法一样,完全符合类型规则。只读与可变的设计理念
Kotlin刻意区分了只读集合和可变集合:List<T>是只读视图:它只提供查询、遍历、获取元素等不会修改集合的方法,保证了持有这个引用的代码无法直接修改集合内容MutableList<T>是可变视图:在只读接口的基础上,额外添加了add()、remove()、clear()等修改集合的方法
当你把MutableList传给接收List的参数时,相当于给了对方一个“只读权限”的视图——在CustomAdapter内部,通过backupItemList只能调用List的方法,没法直接修改原集合(除非强制转型,但这是不推荐的危险操作)。
结合你的代码场景
你代码A里的allList是MutableList<MSetting>,它本身就属于List<MSetting>的子类型,所以直接传给CustomAdapter完全合法。这种设计带来的好处很明显:- 适配器只需要负责读取数据展示,不需要关心集合是否可变,避免了内部意外修改原数据的风险
- 你在代码A里依然可以通过
allList修改集合内容,之后调用适配器的notifyDataSetChanged()之类的方法刷新UI,灵活性拉满
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

