kotlin - 数据类data
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相关推荐
- Kotlin学习(二)-------绝对震撼你的kotlin数据类-data class
你所不了解的Kotlin数据类(data class) 回顾Java Java中我们在定义一个POJO,DTO这些要遵循JavaBean原则的实体类的时候,我们要写属性对应的setXxx和getXxx ...
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...
- kotlin数据类_Kotlin数据类
kotlin数据类 In this tutorial, we'll look at Kotlin Data Class. If you haven't read the Kotlin Classes ...
- 转向Kotlin——数据类和封闭类
数据类和封闭类是Kotlin中的两种特殊的类,今天一起了解一下.更多精彩内容也可以关注我的微信公众号--Android机动车 数据类 数据类是Kotlin的一个语法糖.Kotlin编译器会自动为数据类 ...
- Kotlin学习笔记 第二章 类与对象 第七节 数据类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin 学习笔记(二)—— 数据类、密闭类、循环写法以及常用集合操作符
在上篇笔记中,我们对 Kotlin 的基本类型.关键字.类与对象,以及与 Java 之间互调的内容有了一些认识,这篇笔记来看看 Kotlin 中几种特殊的类,以及集合相关的常用操作. 1. Kotli ...
- 学习Kotlin(三)类和接口
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- kotlin学习之数据类(七)
目录 1. 概念 2. 自动生成函数 3. 排除元素 4. 复制 1. 概念 Kotlin的数据类相当于Java的Bean,Java的一个类都需要写getter和setter方法,代码十分臃肿,而且每 ...
- Kotlin学习笔记12——数据类和密封类
Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...
最新文章
- binutils工具集用法
- 小学生python入门-极度舒适的全套 Python 入门教程,小学生看了也能学会
- Redis之慢查询分析
- 谷歌地图将很快显示电动汽车充电站
- Java面试题:kafka幂等性+事务
- K-Means聚类算法思想及实现
- jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果
- BugkuCTF-MISC题baby_flag.txt
- LeetCode 题解之Find Peak Element
- R40gpio输出无高低电平变化【原创】
- 工具的使用——windows操作系统的使用(创建宽带连接)
- 商城管理系统(前台+后台+管理员+用户+html+jsp)
- freemarker中空值“”,null值的判断
- ubuntu安装ROS教程
- R语言与Python对比
- 印度加强网络管理或部署网猫软件屏蔽Facebook
- DOM常用操作与Demo
- <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
- Vue中打印网页的指定部分的几种方法
- ad策略下发_windows 2008 server 域环境通过组策略下发计划任务