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

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

在这里插入图片描述

http://www.xdnf.cn/news/4341.html

相关文章:

  • Webpack 5 Module Federation 深度解析
  • 【网络编程】一、socket编程详解
  • 中达瑞和便携式高光谱相机:珠宝鉴定领域的“光谱之眼”
  • Python企业级MySQL数据库开发实战指南
  • Unity 游戏数量单位换算(K/M/B/T)
  • Transformer 与 LSTM 在时序回归中的实践与优化
  • Apache Doris 使用指南:从入门到生产实践
  • SpringCloud入门教程合集(1)-SpringCloud简介与Eureka+Feign实现服务注册中心、服务提供与服务消费
  • LightGBM算法原理及Python实现
  • AWS WebRTC如何实现拉流?内部是这样实现的
  • chili3d调试笔记12 deepwiki viewport
  • 学习Python网络爬虫的实例
  • 双系统电脑中如何把ubuntu装进外接移动固态硬盘
  • 使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView
  • 使用 ANSYS SIwave 求解器在 ANSYS AEDT 中预测串行通道性能并生成眼图
  • mysql-视图特性,用户管理和使用c连接
  • C++笔记
  • Web3 应用中常见的数据安全风险及防护措施
  • 使用AI应用开发平台搭建夸奖机器人,玩转AI【COZE入门案例-第1课】
  • 精益数据分析(43/126):媒体网站商业模式的盈利与指标解析
  • RAG框架搭建(基于Langchain+Ollama生成级RAG 聊天机器人)
  • Windows远程连接MySQL报错,本地navicat能连接MySQL
  • Docker安装使用
  • Android SDK 开发中的 AAR 与 JAR 区别详解
  • BUUCTF Pwn [ZJCTF 2019]Login WP
  • uv简单使用
  • Linux环境基础与开发工具使用
  • Linux——特殊权限管理
  • 用html+js+css实现的战略小游戏
  • C++内联函数