Kotlin-解构声明
我们在使用对象时可能需要访问它们内部的一些属性:
class Student(var name: String, var age: Int) fun main() {val student = Student("小明", 18)println(student.name)println(student.age)
}
这样看起来不太优雅,我们可以像下面这样编写:
class Student(var name: String, var age: Int) {operator fun component1() = nameoperator fun component2() = age
}fun main() {val student = Student("小明", 18)val (a, b) = student // 从Student对象中将其属性解构出来println("${a} ${b}")
}
要让一个类的属性支持解构,我们只需添加约定的函数即可。在Kotlin中,我们可以自定义解构出来的结果,也就是定义componentN
函数并通过返回值的形式返回解构的结果:
class Student(var name: String, var age: Int) {operator fun component1() = name // 使用 component1 表示解构出来的第一个参数operator fun component2() = age // 使用 component2 表示解构出来的第二个参数operator fun component3... // 以此类推
}
如果我们不想用前面的参数,可以用_
忽略掉
class Student(var name: String, var age: Int) {operator fun component1() = nameoperator fun component2() = age
}fun main() {val student = Student("小明", 18)val (_, b) = student // 从Student对象中将其属性解构出来println(b)
}
解构同样可以用在Lambda表达式中
class Student(var name: String, var age: Int) {operator fun component1() = nameoperator fun component2() = age
}fun main() {val student = Student("小明", 18)val func: (Student) -> Unit = {(a, b) -> println("${a} ${b}") }func(student)
}