Kotlin解构声明

解构声明:这个功能允许你展开单个复合值,并使用它来初始化多个单独的变量。
任何表达式都可以出现在解构声明的右侧,只要可以对它调用所需数量的 component 函数即可。

/**
 * 要在解构声明中初始化每个变量,会调用名为componentN的函数,其中N是声明中变量的位置。
 */
class Point(val x: Int, val y: Int) {
    /**
     * 手动为非数据类实现解构功能
     * 注意:componentN() 函数需要用 operator 关键字标记,以允许在解构声明中使用它们。
     */
    operator fun component1() = x

    operator fun component2() = y
}

fun main(args: Array<String>) {
    val (x, y) = Point(10, 20)
    println("x=$x,y=$y") // x=10,y=20
}
/**
 * 对于数据类,编译器为每个在主构造方法中声明的属性生成一个componentN函数。
 */
data class Point2(val x: Int, val y: Int)

fun main(args: Array<String>) {
    val (x, y) = Point2(10, 20)
    println("x=$x,y=$y") //x=10,y=20
}

数据对象是一个数据容器,可以理解为多个相关数据被打包到一个对象中。
解构进行相反的操作,是将数据对象拆开将内部的属性取出,赋值给不同的变量。
解构不仅仅适用于数据对象,也适用于集合数组对象。
注意:对于数据对象,定义componentN函数的数量没有限制,但是对于集合数组只允许使用此语法来访问其对象中的前五个元素。

fun main(args: Array<String>) {
    val person = Person("Jack",
            20,
            "male",
            "Beijing",
            "1234556",
            "Jack@gmail.com",
            false,
            "Programmer")
    val (name, age, sex, address, phone, email, marry, job) = person
    println("""name=$name,
        |age=$age,
        |sex=$sex,
        |address=$address,
        |phone=$phone,
        |email=$email,
        |marry=$marry,
        |job=$job""".trimMargin())
}

data class Person(val name: String,
                  val age: Int,
                  val sex: String,
                  val address: String,
                  val phone: String,
                  val email: String,
                  val marry: Boolean,
                  val job: String)

只允许访问集合的前五个元素:

 
Kotlin API中为集合定义了5个componentN函数:


   转载规则


《Kotlin解构声明》 congwiny 采用 知识共享署名 4.0 国际许可协议 进行许可。
评论
 上一篇
Kotlin嵌套类与内部类 Kotlin嵌套类与内部类
Kotlin嵌套类与内部类嵌套类嵌套类就是类中的类,类可以嵌套在其他类中,可以嵌套多层。访问嵌套类(Nested Class)的方式是直接使用“类名.”,有多少层嵌套,就用多少层类名加点号来访问。嵌套类没有持有外部类的引用,所以是无法访问外
2019-09-09
下一篇 
Kotlin操作符重载 Kotlin操作符重载
操作符操作符优先级Kotlin操作符的优先级如下图所示: 为实现这些的操作符,Kotlin为二元操作符左侧的类型和一元操作符的参数类型,提供了相应的函数或扩展函数。 例如在kotlin/core/builtins/native/kotlin
2019-09-02