Kotlin-解构声明

发布于:2025-05-07 ⋅ 阅读:(12) ⋅ 点赞:(0)

我们在使用对象时可能需要访问它们内部的一些属性:

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() = name
    operator 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() = name
    operator 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() = name
    operator fun component2() = age
}

fun main() {
    val student = Student("小明", 18)
    val func: (Student) -> Unit = {
        (a, b) -> println("${a} ${b}") 
    }
    func(student)
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到