kotlin - 数据类data

在kotlin中数据类通过data关键字来修饰。

数据类需满足的条件

  • 主构造器必须至少有一个参数
  • 主构造器中的参数需要用var/val声明为属性
  • 数据类不能用abstract、open、sealed修饰,也不能定义成内部类
  • 数据类可以实现接口也可以继承其他类

系统自动为数据类生成哪些内容

  • 生成equals/hashCode的方法。
  • 自动重写toString方法返回形如:”User(name=guojingbu,age=18)“的字符串
  • 为每个属性生成operator修饰的componentN()方法,来支持解构。
  • 生成copy()方法,方便完成对象复制。

示例代码

  • 系统生成方法代码验证
    数据类代码如下:
data class Result(var code:Int,val msg:String)

反编译后java代码如下:

public final class Result {private int code;@NotNullprivate final String msg;//...省略setter和getter方法public Result(int code, @NotNull String msg) {Intrinsics.checkNotNullParameter(msg, "msg");super();this.code = code;this.msg = msg;}public final int component1() {return this.code;}@NotNullpublic final String component2() {return this.msg;}@NotNullpublic final Result copy(int code, @NotNull String msg) {Intrinsics.checkNotNullParameter(msg, "msg");return new Result(code, msg);}@NotNullpublic String toString() {return "Result(code=" + this.code + ", msg=" + this.msg + ")";}public int hashCode() {int var10000 = this.code * 31;String var10001 = this.msg;return var10000 + (var10001 != null ? var10001.hashCode() : 0);}public boolean equals(@Nullable Object var1) {if (this != var1) {if (var1 instanceof Result) {Result var2 = (Result)var1;if (this.code == var2.code && Intrinsics.areEqual(this.msg, var2.msg)) {return true;}}return false;} else {return true;}}
  • 数据类可以继承其他类代码验证
open class Sup{}interface Base{}data class Result(var code:Int,val msg:String): Sup(),Base{}
  • 如果想让JVM为数据类生成一个无参构造,那么数据类的主构造中的参数必须都有默认值,示例代码如下:
    数据类代码:
data class Result(var code:Int=0,val msg:String=""){}

反编译后生成的java代码:

public final class Result {...省略一些getter和setter方法public Result(int code, @NotNull String msg) {Intrinsics.checkNotNullParameter(msg, "msg");super();this.code = code;this.msg = msg;}// $FF: synthetic methodpublic Result(int var1, String var2, int var3, DefaultConstructorMarker var4) {if ((var3 & 1) != 0) {var1 = 0;}if ((var3 & 2) != 0) {var2 = "";}this(var1, var2);}public Result() {this(0, (String)null, 3, (DefaultConstructorMarker)null);}...省略不相关代码
}

可以看到上的代码JVM会为数据类生成一个没有参数的构造器。

kotlin - 数据类data相关推荐

  1. Kotlin学习(二)-------绝对震撼你的kotlin数据类-data class

    你所不了解的Kotlin数据类(data class) 回顾Java Java中我们在定义一个POJO,DTO这些要遵循JavaBean原则的实体类的时候,我们要写属性对应的setXxx和getXxx ...

  2. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  3. kotlin数据类_Kotlin数据类

    kotlin数据类 In this tutorial, we'll look at Kotlin Data Class. If you haven't read the Kotlin Classes ...

  4. 转向Kotlin——数据类和封闭类

    数据类和封闭类是Kotlin中的两种特殊的类,今天一起了解一下.更多精彩内容也可以关注我的微信公众号--Android机动车 数据类 数据类是Kotlin的一个语法糖.Kotlin编译器会自动为数据类 ...

  5. Kotlin学习笔记 第二章 类与对象 第七节 数据类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  6. Kotlin 学习笔记(二)—— 数据类、密闭类、循环写法以及常用集合操作符

    在上篇笔记中,我们对 Kotlin 的基本类型.关键字.类与对象,以及与 Java 之间互调的内容有了一些认识,这篇笔记来看看 Kotlin 中几种特殊的类,以及集合相关的常用操作. 1. Kotli ...

  7. 学习Kotlin(三)类和接口

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  8. kotlin学习之数据类(七)

    目录 1. 概念 2. 自动生成函数 3. 排除元素 4. 复制 1. 概念 Kotlin的数据类相当于Java的Bean,Java的一个类都需要写getter和setter方法,代码十分臃肿,而且每 ...

  9. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

最新文章

  1. binutils工具集用法
  2. 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会
  3. Redis之慢查询分析
  4. 谷歌地图将很快显示电动汽车充电站
  5. Java面试题:kafka幂等性+事务
  6. K-Means聚类算法思想及实现
  7. jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果
  8. BugkuCTF-MISC题baby_flag.txt
  9. LeetCode 题解之Find Peak Element
  10. R40gpio输出无高低电平变化【原创】
  11. 工具的使用——windows操作系统的使用(创建宽带连接)
  12. 商城管理系统(前台+后台+管理员+用户+html+jsp)
  13. freemarker中空值“”,null值的判断
  14. ubuntu安装ROS教程
  15. R语言与Python对比
  16. 印度加强网络管理或部署网猫软件屏蔽Facebook
  17. DOM常用操作与Demo
  18. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
  19. Vue中打印网页的指定部分的几种方法
  20. ad策略下发_windows 2008 server 域环境通过组策略下发计划任务

热门文章

  1. 小度i耳目自建服务器,小度i耳目常见问题解答
  2. Vue 发送数据请求
  3. 手把手教你使用anaconda安装pytorch环境(适合新手)
  4. UART串口的H4协议和H5协议
  5. 学习HTML(十五)——结合CSS文件在页中创建按钮
  6. 虚拟服务器调优不包括,使用虚拟主机会对SEO优化有影响吗?
  7. ffmpeg_parse_options命令行解析
  8. java操作access数据库
  9. 赫夫曼树和赫夫曼编码(C语言版)
  10. jquery实现事件代理