Data Class 是 Kotlin 中一种特殊类型的类,主要用于存储和操作数据。它是 Kotlin 语言为了简化数据处理而引入的一个重要特性。通过 Data Class,开发者可以更方便地创建数据模型,并自动生成一些常用的方法(如 equalshashCodetoString 等),从而减少样板代码的编写。

1. 基本概念

Data Class 是一种用于存储数据的类。它的主要目的是封装数据,并提供对这些数据的访问和操作。与普通的类不同,Data Class 有一些特殊的功能和限制:

  • 自动生成方法:Kotlin 会自动生成 equalshashCodetoStringcomponentN 方法。
  • 不可变性:默认情况下,Data Class 的属性是不可变的(即 final),除非显式声明为 var
  • 构造函数:Data Class 会自动生成主构造函数,并且可以在构造函数中直接初始化属性。

2. 语法结构

2.1 定义 Data Class

data class User(
    val name: String,
    val age: Int,
    val email: String 
)
  • data关键字:表示这是一个 Data Class。
  • 属性:使用valvar声明属性。默认情况下,属性是不可变的。
  • 构造函数:Data Class 会自动生成主构造函数,并且可以在构造函数中直接初始化属性。

2.2 创建实例

val user = User("Alice", 30, "alice@example.com")

3. 核心特性

3.1 自动生成的方法

Kotlin 会为 Data Class 自动生成以下方法:

  1. equalshashCode
    • 用于比较两个对象是否相等。
    • 示例:
val user1 = User("Alice", 30, "alice@example.com") 
val user2 = User("Alice", 30, "alice@example.com") 
println(user1 == user2) // 输出 true
  1. toString
    • 用于将对象转换为字符串表示。
    • 示例:
val user = User("Alice", 30, "alice@example.com") 
println(user.toString())  // 输出 User(name=Alice, age=30, email=alice@example.com)

【*】解构声明

解构声明 是 Kotlin 提供的一种语法,可以将一个数据类(data class)的各个属性“一次性”拆分成多个独立的变量,而不需要显式调用各个属性的 getter。
例如,假设你有这样一个数据类:

data class Person(val name: String, val age: Int)

你可以这样写:

val person = Person("Alice", 25)
// 解构声明,将 person 的属性拆分成 name 和 age 两个变量
val (name, age) = person
println("Name: $name, Age: $age")

这里编译器自动调用了 person.component1()person.component2() 方法,把 nameage 赋值给对应的变量。这就是解构声明,它让代码更简洁。

3.2 不可变性

默认情况下,Data Class 的属性是不可变的(即final)。如果需要修改属性的值,可以将属性声明为var

data class User(var name: String, val age: Int, val email: String )// 修改属性值 user.name  = "Bob"

3.3 【*】复制对象

Kotlin 提供了一个copy方法,用于快速复制对象并修改部分属性。

val user = User("Alice", 30, "alice@example.com") 
val newUser = user.copy(name  = "Bob", age = 31)
println(newUser) // User(name=Bob, age=31, email=alice@example.com)

更新: 2025-03-24 11:56:45
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/aq1za171123nhcmu


相关笔记