Kotlin 数据类与密封类学习笔记

数据类(Data Class)

在 Kotlin 中,我们可以通过使用 data 关键字来定义数据类。数据类主要用于存储数据,它会自动地为属性生成以下函数:

  1. equals()
  2. hashCode()
  3. toString()
  4. componentN() 函数(用于解构)

以下是一个简单的数据类的例子:

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

可以看到,上面的代码中,我们使用了 data 关键字来定义了一个名为 Person 的数据类。该类具有两个属性:nameage。由于此类是数据类,因此编译器会自动创建 equals()hashCode()toString() 函数。

我们可以像下面这样创建该类的实例,也可以通过解构来获取它的属性:

kotlinCopy Code
val person = Person("John", 30) println(person.name) // 输出 "John" println(person.age) // 输出 "30" val (name, age) = person println(name) // 输出 "John" println(age) // 输出 "30"

密封类(Sealed Class)

密封类是一种特殊的类,它可以被继承,但只能在其声明的文件中进行继承。密封类主要用于表示一组有限的类型,例如枚举。

以下是一个简单的密封类的例子:

kotlinCopy Code
sealed class Result class Success(val message: String) : Result() class Failure(val error: Exception) : Result()

可以看到,上面的代码中,我们定义了一个名为 Result 的密封类。该类有两个子类:SuccessFailure。由于此类是密封类,因此这两个子类必须在与 Result 相同的文件中声明。

以下是如何使用上述密封类的示例:

kotlinCopy Code
fun getMessage(result: Result) = when (result) { is Success -> result.message is Failure -> "Error: ${result.error.message}" } val success = Success("操作成功") val failure = Failure(Exception("发生异常")) println(getMessage(success)) // 输出 "操作成功" println(getMessage(failure)) // 输出 "Error: 发生异常"

getMessage() 函数中,我们根据传递进来的 Result 实例的类型,分别返回不同的结果。

以上就是 Kotlin 数据类与密封类的基本内容和使用方法。