kotlin学习 - Kotlin 解构

kotlin学习 - Kotlin 解构

解构

解构声明 将一个对象 拆解成 若干个变量 分别赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

fun main(args: Array<String>) {
val user = User(12,"zs")
val (age,name,user_data) = user
println("age = ${age}")
println("name = ${name}")
println("user_data = ${user_data}")
}

class User(var age: Int, var name: String) {
//operator 将 一个函数 标记为 重载一个操作符 或实现 一个约定
operator fun component1() = age
operator fun component2() = name
operator fun component3() = "${age} ${name}"
}

自定义解构声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Book(var name: String, var price: Float) {
operator fun component1(): String {
return name
}

operator fun component2(): Float {
return price
}
}

fun main(args: Array<String>) {
val (name, price) = Book("Kotlin入门", 66.6f)
println(name)
println(price)
}
1
2
3
4
5
6
7
8
9
10
11
12
fun main(args: Array<String>) {
val (name,price) = getBookInfo()
println("name = ${name}")
println("price = ${price}")
}

fun getBookInfo(): Book {
return Book("Kotlin入门", 66.6f)
}

data class Book(var name: String, var price: Float)

Kotlin 中数组,list、map系列集合默认也支持解构声明的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fun main(args: Array<String>) {
val array = arrayOf(1, 2, 3)
val (a1, a2, a3) = array
println("$a1")
println("$a2")
println("$a3")

val list = listOf(1, 2, 3)
val (b1, b2, b3) = list
println("$b1")
println("$b2")
println("$b3")

val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3)
for ((key, value) in map) {
println("$key-$value")
}
}

忽略不需要的解构

如果在解构声明中不需要某个变量,那么可以用下划线_取代其名称,这样也就不会调用相应的componentN()操作符函数:

1
val (_, price2) = Book("Kotlin入门", 66.6f)