1. 简介

Kotlin 提供了多种创建对象列表的方式。本文将重点介绍三种最常用的方法:使用 listOf()mutableListOf()List() 构造函数。

掌握这几种方式后,你就能在实际项目中更灵活地✅ 初始化和管理对象列表。如果你经常处理集合操作,这些属于必须熟练掌握的基础技能,避免踩坑❌ 使用错误的列表类型导致运行时异常或不必要的性能开销。

相关阅读:Kotlin 集合详解

2. 使用 listOf()

listOf() 是创建不可变列表(immutable list)最直接的方式。它接收任意数量的元素作为参数,并返回一个只读列表。

data class Person(val name: String, val age: Int)
val people = listOf(
    Person("Alice", 25),
    Person("Bob", 30),
    Person("Charlie", 35)
)

上面的例子中:

  • 定义了一个 Person 数据类
  • 使用 listOf() 创建包含三个 Person 实例的列表

⚠️ 注意:虽然列表本身不可变(无法添加/删除元素),但其中的对象如果属性是 var 仍可修改。也就是说,不可变的是引用集合,而不是对象内容

尝试执行 people.add(...) 会抛出 UnsupportedOperationException

3. 使用 mutableListOf()

当你需要后续动态修改列表时,应使用 mutableListOf()。它的用法与 listOf() 几乎一致,但返回的是可变列表(MutableList),支持增删改操作。

data class Dog(val name: String, val age: Int)
val dogs = mutableListOf(
    Dog("Buddy", 3),
    Dog("Max", 5),
    Dog("Lucy", 2)
)

此时你可以安全地对 dogs 进行操作:

dogs.add(Dog("Daisy", 4))
println(dogs) // [Dog(name=Buddy, age=3), Dog(name=Max, age=5), Dog(name=Lucy, age=2), Dog(name=Daisy, age=4)]

✅ 适用场景:

  • 需要在循环中逐步添加元素
  • 列表内容来自异步加载或多阶段处理
  • 要支持用户交互导致的数据变更

更多操作参考:向 Kotlin 列表添加元素

4. 使用 List 构造函数

Kotlin 还提供了一种更具编程灵活性的方式——通过 List(size) { lambda } 构造器创建列表。它接受两个参数:

  • size: 指定列表长度
  • 初始化 lambda:接收索引 index,返回对应位置的元素

这种方式特别适合生成规则数据或批量初始化对象。

data class Car(val model: String, val price: Int)
val cars = List(3) { index ->
    Car("Car ${index + 1}", (index + 1) * 100)
}

最终结果等价于:

[
    Car(model="Car 1", price=100),
    Car(model="Car 2", price=200),
    Car(model="Car 3", price=300)
]

✅ 优势:

  • 支持基于索引的动态构造
  • 一行代码完成批量实例化
  • 更适合函数式风格编程

⚠️ 注意:这个构造函数默认创建的是 只读列表(ReadOnlyList)。即使你试图转成 MutableList,原始返回值仍是 immutable。

如果你想得到可变版本,可以链式调用 .toMutableList()

val mutableCars = List(3) { index ->
    Car("Car ${index + 1}", (index + 1) * 100)
}.toMutableList()

5. 总结

方法 是否可变 适用场景
listOf() ❌ 不可变 固定数据、配置项、常量列表
mutableListOf() ✅ 可变 动态增删、运行时构建
List(size){} 默认不可变 规则数据生成、索引相关初始化

📌 核心建议:

  • 大多数情况下优先使用 listOf()mutableListOf(),简洁直观
  • 当需要根据索引或其他逻辑批量生成对象时,List() 构造函数是更优雅的选择
  • 始终遵循“最小权限”原则:不需要修改就用不可变列表,提升代码安全性与可读性

所有示例代码已上传至 GitHub:Baeldung Kotlin 教程仓库
邮箱联系:support@baeldung.com


原始标题:Creating a List of Objects in Kotlin