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

保定网站建广州市财经商贸职业学校

保定网站建,广州市财经商贸职业学校,wordpress后台轮播图,深圳 骏域网站建设开发中有时只是想分解一个包含多个字段的对象来初始化几个单独的变量。要实现这一点#xff0c;可以使用Kotlin的解构声明。本文主要了解#xff1a;“1、如何使用解构声明这种特性 2、底层是如何实现的 3、如何在你自己的类中实现它1、解构声明的使用解构声明可以使用Kotlin的解构声明。本文主要了解“1、如何使用解构声明这种特性       2、底层是如何实现的       3、如何在你自己的类中实现它1、解构声明的使用解构声明Destructuring Declarations概念将对象所包含的字段视为一组独立的变量解构声明允许我们这样定义局部变量://Perosn对象定义 data class Person(var id: Int, var name: String, var age: Int)fun main() {val person  Person(1, 张三, 20)//解构声明id/name/age新定义的三个变量分别对应Person中的三个字段val(id, name, age)  person//访问解构声明的name字段println(这个人的名字: $name) }在处理返回值时也可以使用解构声明:fun getPersonInfo()  Person(2, 李四, 35) val(id, name, age)  getPersonInfo()或者如果我们需要从一个函数中返回两个值:fun getTwoValues(): PairInt, String {// ...return Pair(1, success) }val (result, status)  getTowValues()使用for循环迭代集合可以通过解构声明完成如下所示:for ((a, b) in collection) { ... }上面代码中变量a和b对应返回集合中的前两个元素。然而在Map中如下面代码中变量a和b将分别对应的是key和value:var map: HashMapInt, Person  HashMap()map.put(1, person)for((key, value) in map){println(Key: $key, Value: $value) }默认情况下所有数据类data calss都支持解构。你可以决定只使用类字段中的一个变量子集://Perosn对象定义 data class Person(var id: Int, var name: String, var age: Int)fun main() {val person  Person(1, 张三, 20)//val(id, name, age)  person//结构Person类中前两个字段val(id, name)  person }解构不允许你准确地选择你想要使用的字段;它总是使用前n个字段其中n是您声明的变量的数量。这样做的缺点是很容易犯错误。例如下面的代码片段可能会提供一个意想不到的结果:如果你只需要一个非连续字段的子集对那些你不感兴趣的字段使用_Kotlin会跳过它们。上面的例子变成:fun main() {val person  Person(1, 张三, 20)val (_,name,age)  personprintln(name)println(age) }2、底层实现让我们看看一个反编译的数据类看看发生了什么。我们将只关注为解构而生成的函数。要查看Java反编译代码请转到Tools - Kotlin - Show Kotlin Bytecode然后按下Decompile按钮。public final class Person {private int id;NotNullprivate String name;private int age;//...public Person(int id, NotNull String name, int age) {//...}public final int component1() {return this.id;}NotNullpublic final String component2() {return this.name;}public final int component3() {return this.age;}}我们看到在主构造函数中声明的每个属性都会生成名为componentN的函数其中N是主构造函数中字段的索引。3、实现解构正如我们所看到的解构依赖于componentN函数。因此如果您想将解构功能添加到不支持它的类中那么只需实现相应的componentN操作符函数即可。确保在它们前面加上operator关键字。class Student(val name: String,val age: String ) {operator fun component1(): String  nameoperator fun component2(): Int  age... }Kotlin允许您通过扩展函数为不属于自己的类实现解构。例如Map.Entry只是一个接口默认情况下它不支持解构。为了克服这个问题创建了component1()和component2()函数它们返回Map.Entry的键和值。具体可以看Map.Entry源码或者API文档https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/-entry/总结当您需要将对象的字段分解为变量时请使用解构。在底层解构是通过提供componentN操作符函数实现的因此您可以自己为您认为从该功能中受益的类提供这些操作符函数。
http://www.w-s-a.com/news/245122/

相关文章:

  • 网站整体色调网站建设都有什么类型
  • 比较简洁大方的网站软件工程四大方向
  • 大家称赞的网站建设常德小学报名网站
  • 做网站怎么建文件夹百度网盘搜索神器
  • 企业有域名怎么做网站淘宝推广平台
  • 学网站开发去哪学药品销售推广方案
  • 哔哩哔哩h5播放器深圳网站seo外包公司哪家好
  • asp做的手机网站wordpress 文章title
  • 网站验证码目录wordpress内嵌播放器
  • 文明网网站建设南昌市建设规费标准网站
  • 安康有建网站的公司吗做网站用什么网名好
  • 济南网站制作哪家专业西安市城乡建设网官方网站
  • 网站建设有趣小游戏怎样让网站优化的方式
  • 昭通做网站儿童编程教学入门教程
  • eclipse静态网站开发软文广告投放平台
  • 网站建设教学视频济南做网站需要多少钱
  • 网站免费做软件市工商联官方网站建设方案
  • 网站建设大体包含英铭长沙网站建设
  • 网站建设培训学校北京如何搜索网站
  • discuz论坛模板哪些网站容易做seo优化
  • 渭南公司做网站网站建设互联网推广
  • 公司网站app怎么做杭州建设局网站
  • 网站开发需要自己写代码吗12306网站多少钱做的
  • 策勒网站建设四川建设网有限责任公司招聘
  • 网站建设哪里有学网页界面设计论文
  • 怎么做外贸网站推广劳务公司网站怎么做
  • 滴答手表网站中铁建设集团有限公司招聘信息2021
  • 重庆富通科技有限公司网站新闻头条最新消息国家大事
  • 四字母net做网站怎么样企业代运营公司
  • 纪检网站建设方案wordpress首页静态页面