Kotlin 数据类
最后修改于 2024 年 1 月 29 日
在本文中,我们介绍了 Kotlin 数据类。
Kotlin 数据类 旨在保存数据。为此,不需要标准类的大部分高级功能。Groovy、F#、C# 语言有类似于 Kotlin 数据类的记录。
使用数据类,我们可以大大减少模板代码。编译器会自动创建 equals、hashCode、toString 和 copy 函数。
在 Kotlin 中,使用 data class 关键字创建数据类。
数据类必须遵循一些规则。主构造函数需要至少一个参数。所有主构造函数参数都必须标记为 val 或 var。数据类不能是抽象的、开放的、密封的或内部的。
Kotlin 数据类简单示例
以下是使用 Kotlin 数据类的简单示例。
package com.zetcode
data class User(val fname: String, val lname: String, val occupation: String)
fun main() {
val u = User("John", "Doe", "gardener")
println(u.lname)
println(u.fname)
println(u.occupation)
println(u)
}
我们定义了一个具有三个字段的 User 数据类。
data class User(val fname: String, val lname: String, val occupation: String)
定义数据类只需要一行代码。
println(u.lname) println(u.fname) println(u.occupation)
Kotlin 创建了三个属性。
println(u)
此外,我们定义了一个方便的 toString 方法,当我们将对象打印到控制台时,将调用该方法。
Doe John gardener User(fname=John, lname=Doe, occupation=gardener)
无参数构造函数
如果生成的类需要一个无参数构造函数,则必须为属性指定默认值。
package com.zetcode
data class Student(var name: String = "", var favCol: String = "")
fun main() {
val s1 = Student()
s1.name = "Paul"
s1.favCol = "blue"
println(s1)
}
为我们的 Student 构造函数提供默认值,我们可以创建一个具有空无参数构造函数的对象。
Kotlin 数据类复制
copy 函数用于复制一个对象,允许我们更改其某些属性,同时保持其余属性不变。
package com.zetcode
data class User(val fname: String, val lname: String, val occupation: String)
fun main() {
val u1 = User("John", "Doe", "gardener")
val u2 = u1.copy(fname = "Jane", occupation = "teacher")
println(u1)
println(u2)
println(u2.fname)
println(u2.lname)
println(u2.occupation)
}
使用 copy,我们可以快速创建一个共享 lname 属性的新用户。
User(fname=John, lname=Doe, occupation=gardener) User(fname=Jane, lname=Doe, occupation=teacher) Jane Doe teacher
Kotlin 数据类解构
Kotlin 数据类支持解构操作。它允许我们将对象属性提取到变量中。
package com.zetcode
data class User(val fname: String, val lname: String, val occupation: String)
fun main() {
val u = User("John", "Doe", "gardener")
val (fname, lname, occupation) = u
println("$fname $lname is a $occupation")
}
在示例中,我们将用户对象的三个属性解构为三个独立的变量。
John Doe is a gardener
Kotlin 数据类过滤
数据类非常适合数据分析。
package com.zetcode
data class User(val fname: String, val lname: String, val salary: Int)
fun main() {
val users = arrayOf(
User("John", "Doe", 1230),
User("Lucy", "Novak", 670),
User("Ben", "Walter", 2050),
User("Robin", "Brown", 2300),
User("Amy", "Doe", 1250),
User("Joe", "Draker", 1190),
User("Janet", "Doe", 980),
User("Albert", "Novak", 1930)
)
users.filter { it.salary < 1000 }.forEach { e -> println(e) }
}
在示例中,我们有一个用户列表。使用 filter,我们找出所有工资低于 1000 的用户。
User(fname=Lucy, lname=Novak, salary=670) User(fname=Janet, lname=Doe, salary=980)
Kotlin Pair & Triple
Kotlin 提供了两个标准数据类:Pair 和 Triple。
package com.zetcode
fun main() {
val p1 = Pair(1, 2)
val p2 = Pair(3, 4)
val p3 = Pair(p1.first + p2.first, p2.second + p2.second)
println(p1)
println(p2)
println(p3)
val t1 = Triple(1, 2, 3)
val t2 = Triple(3, 4, 5)
val t3 = Triple(t1.first + t2.first, t1.second + t2.second,
t1.third + t2.third)
println(t1)
println(t2)
println(t3)
}
我们可以使用 first、second 和 third 属性来获取它们的值。
(1, 2) (3, 4) (4, 8) (1, 2, 3) (3, 4, 5) (4, 6, 8)
来源
在本文中,我们介绍了 Kotlin 中的数据类。
作者
列出 所有 Kotlin 教程。