Kotlin解构

64 阅读1分钟

解构:日常中简单的小语法,方便,快速,简洁的使用对象中的属性。

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

val (name, age) = Person("sir", 24)
println(name)
println("$age")

如上,一个解构声明创建了2个新的变量,name,age,并且可以单独的使用它们。

原理解析

如上代码,经过反编译为java代码后,关键部分如下所示:

public final String component1() {
   return this.name;
}

public final int component2() {
   return this.age;
}

public static final void main() {
   Person var2 = new Person("sir", 24);
   String var0 = var2.component1();
   int age = var2.component2();
}
  • 也就是:val name = person.component1(); val age = person.conponent2()
  • 由反编译的结果可知,data数据类默认实现了componentN()函数

注意,componentN()函数需要使用operator(重载)关键字进行标记,已允许在解构声明中使用它们。

普通类如何做到可解构

class Book(var title: String, var price: Float) { 
    operator fun component1(): String = title 
    operator fun component2(): Float = price 
}

拓展

lambda表达式中也经常可以使用解构:

{ a //-> …… } // 一个参数
{ a, b //-> …… } // 两个参数
{ (a, b) //-> …… } // 一个解构对
{ (a, b), c //-> …… } // 一个解构对以及其他参数