kotlin 中 datac-class 和 class

29 阅读1分钟

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 必须满足以下条件:

  • 必须有主构造函数
  • 主构造函数至少要有一个参数
  • 主构造函数的所有参数必须是 valvar

5. 继承限制

  • data class 不能被其他类继承(隐式为 final)
  • 不能是 openabstractinner

6. 相等性比较

data classequals() 函数会比较所有属性值,而普通 class 需要手动实现:

data class Point(val x: Int, val y: Int)
val p1 = Point(1, 2)
val p2 = Point(1, 2)
println(p1 == p2) // true,比较属性值