首发于公众号: DSGtalk1989
21.解构声明
我们可以直接通过括号包含变量的方式进行数据获取
-
一般使用
比如有个类
Person
有两个属性name``age
。我们一般的获取方式是这样的
class Person{ var name = "1" var age = 4 } fun main() { val person = Person() val name = person.name val age = person.age }
我们白白产生了一个
person
对象,造成了浪费。这时候我们就可以使用解构声明需要去重载操作符方法
componentN
,所有componentN
方法指向的就是括号中从第一个开始的参数class Person{ var name = "1" var age = 4 operator fun component1() = name operator fun component2() = age } fun main() { val (a,b) = Person() println(a) println(b) }
-
map使用
在
map
中使用的比较多的解构是这样的for ((key, value) in map) { // 使用 key 和 value 执行某种操作 }
-
有些参数用不到
比如上面的例子,我们只需要用到name,而不用age,在kotlin
1.1
之后支持用下划线略过不需要使用的参数,类似于lambda中不需要使用到的出参。val (_,b) = Person()
-
lambda中的解构
从kotlin
1.1
开始支持lambda中有解构{ a -> ... } // 这里是一个参数 { a, b -> ... } // 这里是两个参数 { (a, b) -> ... } // 这里是将一个参数解构为两个参数 { (a, b), c -> ... } // 这里是将一个参数解构为两个参数, 然后是另一个参数
我们针对上面的
Person
和Map
分别举例子val personArray = arrayOf(Person()) personArray.filter { (name, age) -> name.startsWith("1") || age > 1 } val map = mapOf("key" to 1, "haha" to 2) map.mapKeys { (key, value) -> println("key : $key value : $value") }
Kotlin学习笔记之 13 基础操作符run、with、let、also、apply
网友评论