Kotlin 中 data class 和普通 [class] 的主要区别如下:
1. 自动生成的成员函数
data class 会自动生成以下函数:
- [equals()] [hashCode()]
toString()copy()函数componentN()函数(用于解构声明)
data class Person(val name: String, val age: Int)
// 自动生成 equals(), hashCode(), toString(), copy() 等方法
2. 解构声明支持
data class 支持解构声明,可以方便地提取属性值:
val person = Person("Alice", 25)
val (name, age) = person // 使用 componentN() 函数
3. copy() 函数
data class 提供 copy() 函数,可以方便地创建对象副本并修改部分属性:
val person1 = Person("Alice", 25)
val person2 = person1.copy(age = 26)
4. 主构造函数要求
data class 必须满足以下条件:
- 必须有主构造函数
- 主构造函数至少要有一个参数
- 主构造函数的所有参数必须是
val或var
5. 继承限制
data class不能被其他类继承(隐式为 final)- 不能是
open、abstract或inner
6. 相等性比较
data class 的 equals() 函数会比较所有属性值,而普通 class 需要手动实现:
data class Point(val x: Int, val y: Int)
val p1 = Point(1, 2)
val p2 = Point(1, 2)
println(p1 == p2) // true,比较属性值