当前位置: 首页 > news >正文

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)
}

在这里插入图片描述

相关文章:

  • Kotlin重构Android项目实践
  • 【SaaS安全】数据加密与用户身份管理
  • 前端、XSS(跨站脚本攻击,Cross-Site Scripting)
  • ORCAD打印pdf
  • HTTP与HTTPS协议深入解析
  • 人工智能对人类的影响
  • LabVIEW燃气轮机测控系统
  • tinyrenderer笔记(Shadow Mapping)
  • 应对联网汽车带来的网络安全挑战
  • C++中map和unordered_map的区别是什么?
  • Elasticsearch知识汇总之ElasticSearch部署
  • jenkins访问端口调整成80端口
  • OpenAI的“四面楚歌”:从营利到非营利,一场关于AGI控制权的革命
  • idea使用lombok错误,找不到符号,明明编译没问题,运行报错
  • list的使用及模拟实现
  • 玛格丽特鸡尾酒评鉴,玛格丽特酒的寓意和象征
  • 内存种类详解
  • create-vue搭建Vue3项目(Vue3学习2)
  • 使用BlockingQueue简化Java中的生产者-消费者问题
  • 逻辑越权--水平垂直越权(WEB漏洞)
  • 央行行长:债券市场“科技板”准备工作基本就绪,目前近百家市场机构计划发行超三千亿科技创新债
  • 上海乐高乐园明天正式开售年卡,下月开启试运营
  • 世界哮喘日|专家:哮喘无法根治,“临床治愈”已成治疗新目标
  • 甘肃省政府原党组成员、副省长杨子兴被提起公诉
  • 科技赋能文化体验,“五一”假期“海昏侯”人气创新高
  • 新华每日电讯:上海“绿色大民生”撑起“春日大经济”