Kotlin 数据类与密封类

预计阅读时间1 分 122 views

在 Kotlin 中,数据类和密封类能够帮助开发者更简洁、安全地管理数据。数据类简化了数据存储对象的定义,而密封类则提供了一种更严格的方式来定义受限的类型层次结构。

一、数据类:简化数据存储

使用场景

当你需要一个类主要用于存储数据时,数据类就派上用场了。它们可以帮助你避免编写大量的样板代码,例如生成 equals()hashCode()toString() 等方法。

声明

使用 data 关键字声明一个数据类:

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

特性

  • 自动生成方法: 编译器会自动生成 equals()hashCode()toString()copy()componentN() 等方法。
  • 简洁性: 无需手动编写上述方法,代码更加简洁易读。

用法

val user1 = User("Alice", 30)
val user2 = User("Bob", 25)

println(user1) // 输出:User(name=Alice, age=30)
println(user1 == user2) // 输出:false

二、密封类:定义受限的类型层次结构

使用场景

当你需要表示一种有限的、预定义的类型集合时,密封类非常有用。例如,网络请求的结果可以是成功或失败,这两种状态可以使用密封类来表示。

声明

使用 sealed 关键字声明一个密封类:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val message: String) : Result<Nothing>()
}

特性

  • 受限的子类: 所有子类都必须在密封类的定义中嵌套。
  • 穷尽性检查: 当使用 when 表达式处理密封类的实例时,编译器会强制检查是否覆盖了所有可能的子类。

用法

fun handleResult(result: Result<String>) {
    when (result) {
        is Result.Success -> println("Success: ${result.data}")
        is Result.Error -> println("Error: ${result.message}")
    }
}

希望这篇教程能够帮助你理解和使用 Kotlin 中的数据类和密封类。

分享此文档

Kotlin 数据类与密封类

或复制链接

本页目录