🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. 什么是解构语法 要了解所谓的解构语法,这里首先来看一个案例: ~~~ fun main() { var list = listOf(2, 1, 3) var (a, b, c) = list println("a=${a}, b=${b}, c=${c}") } ~~~ 结果: ``` a=2, b=1, c=3 ``` 其实也就是说可以定义几个变量,然后将其值一一放置在对应的变量空间中。 ## 2. 自定义解构语法 有些时候我们也希望自己定义的类可以支持解构语法操作。这里就需要进行解构声明。在数据类中支持解构语法,比如下面的案例: ~~~ data class KotlinDemo(var name: String, var age: Int, var man: Boolean){ } fun main() { var (name, age, sex) = KotlinDemo("张三", 23, true) println("name=$name, age=$age, sex=${sex.run { if(this) "男" else "女" }}") } ~~~ 结果: ``` name=张三, age=23, sex=男 ``` 也就是说,其实数据类默认是支持解构语法的。所以我们可以看下`show kotlin ByteCode`来查看最终生成的代码: ~~~ KotlinDemo var3 = new KotlinDemo("张三", 23, true); String name = var3.component1(); int age = var3.component2(); boolean sex = var3.component3(); ~~~ 也就是我们如果希望在自定义类中也有这个功能,只需要定义`component1`、`component2`和`component3`这些类似的函数即可。比如: ~~~ class KotlinDemo(var name: String, var age: Int, var man: Boolean){ operator fun component1() = name operator fun component2() = age operator fun component3() = man } ~~~ 调用和结果和上面的案例保持一致,这里就不再给出。 注意到一点就是这里我们使用了`operator`这个关键字,也就是运算符重载,这个内容将在下个小节中进行学习。