You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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完全合法。这种设计带来的好处很明显:

    1. 适配器只需要负责读取数据展示,不需要关心集合是否可变,避免了内部意外修改原数据的风险
    2. 你在代码A里依然可以通过allList修改集合内容,之后调用适配器的notifyDataSetChanged()之类的方法刷新UI,灵活性拉满

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:34:25