Kotlin 数据类与密封类学习笔记
数据类(Data Class)
在 Kotlin 中,我们可以通过使用 data
关键字来定义数据类。数据类主要用于存储数据,它会自动地为属性生成以下函数:
equals()
hashCode()
toString()
componentN()
函数(用于解构)
以下是一个简单的数据类的例子:
kotlinCopy Codedata class Person(val name: String, val age: Int)
可以看到,上面的代码中,我们使用了 data
关键字来定义了一个名为 Person
的数据类。该类具有两个属性:name
和 age
。由于此类是数据类,因此编译器会自动创建 equals()
、hashCode()
和 toString()
函数。
我们可以像下面这样创建该类的实例,也可以通过解构来获取它的属性:
kotlinCopy Codeval 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 Codesealed class Result
class Success(val message: String) : Result()
class Failure(val error: Exception) : Result()
可以看到,上面的代码中,我们定义了一个名为 Result
的密封类。该类有两个子类:Success
和 Failure
。由于此类是密封类,因此这两个子类必须在与 Result
相同的文件中声明。
以下是如何使用上述密封类的示例:
kotlinCopy Codefun 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 数据类与密封类的基本内容和使用方法。