数据类(data class)的特点与使用场景
1. 什么是数据类?
Kotlin 中的 data class 是专门用于存储数据的类,编译器会自动为其生成标准化的方法(如 equals()、hashCode()、toString()、copy() 等),从而减少样板代码。
定义语法
data class User(val name: String, val age: Int)
2. 数据类的核心特点
自动生成的方法
equals()和hashCode()
基于主构造函数中声明的属性比较对象内容。toString()
格式示例:User(name=John, age=30)。copy()
允许复制对象并修改部分属性:val user1 = User("John", 30) val user2 = user1.copy(age = 31) // 修改 age
其他特性
- 主构造函数必须至少有一个参数。
- 参数需标记为
val或var。 - 不能是
abstract、open、sealed或inner类。
3. 使用场景
场景 1:DTO(数据传输对象)
// 网络请求返回的 JSON 数据映射
data class ApiResponse(val success: Boolean, val data: String)
场景 2:模型类
// 数据库实体或领域模型
data class Product(val id: Int, val name: String, val price: Double)
场景 3:解构声明
数据类支持解构:
val user = User("Alice", 25)
val (name, age) = user // name = "Alice", age = 25
4. 注意事项
- 继承限制
数据类不能继承其他类(但可以实现接口)。 - 组件函数
编译器会为每个属性生成componentN()函数(用于解构)。 - 手动重写方法
如需自定义行为,可显式重写toString()等方法。
5. 示例代码
data class Book(val title: String, val author: String, val pages: Int)
fun main() {
val book = Book("Kotlin Guide", "Jane Doe", 200)
println(book) // 输出: Book(title=Kotlin Guide, author=Jane Doe, pages=200)
// 使用 copy 创建修改后的副本
val updatedBook = book.copy(pages = 250)
}
总结
| 特性 | 说明 |
|---|---|
| 自动生成方法 | equals, hashCode, toString, copy |
| 适用场景 | DTO、模型类、解构声明 |
| 限制 | 必须含参数,不可继承其他类 |
通过数据类,Kotlin 显著简化了以数据为中心的类的实现,提升开发效率。
