Kotlin---data class
时间:2022-07-22
本文章向大家介绍Kotlin---data class,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Data类与普通类的区别
-
toString
函数会被复写为打印具体属性的值 - 新增
components
方法 , 获取对应属性的值 - 新增
copy
方法 , 可以用来修改具体属性的值 - 重写了
hashCode
方法 , 不再比较对象引用 , 而是比较对象的值
data class PlayerDataClass(val name: String, var age: Int) {
var point: Int = 0
constructor(name: String, age: Int, point: Int) : this(name, age) {
this.point = point
}
}
重写toString函数
- data类的
toString
方法会打印出具体的值 - 非data类的
toString
方法则打印出地址
println(player.toString())
// PlayerClass@27c170f0
println(dataClassPlayer.toString())
// PlayerDataClass(name=Alan, age=18)
另外一个测试类的toString字节码如下
image.png
新增getComponets函数
- data类新增属性的
component
方法 -
component1
代表第一个属性 ,components
代表第二个属性
println(dataClassPlayer.component1())
// Alan
println(dataClassPlayer.component2())
// 18
/* Destructuring Declarations */
val (name, age) = dataClassPlayer
println("dataClassPlayer's name = $name, age = $age")
// dataClassPlayer's name = Alan, age = 18
新增copy函数
- data类新增
copy
函数 , 可以设置属性的值
val clonedDataClassPlayer = dataClassPlayer.copy(age = 30)
println(clonedDataClassPlayer.age)
// clonedDataClassPlayer.age=30
其实也是通过解析函数 , 然后创造一个新的对象赋值返回.
copy函数的字节码
复写hashCode函数
- data类复写
hashCode
函数 , 比较对象属性的值 , 而非地址
// 非data类
val player1 = PlayerClass("Peter", 24)
val player2 = PlayerClass("Peter", 24)
println(player1.equals(player2))
// false. call === implicitly
println(player1.hashCode())
// 1414644648
println(player2.hashCode())
// 640070680
// data类
val dataClassPlayer1 = PlayerDataClass("Peter", 24)
val dataClassPlayer2 = PlayerDataClass("Peter", 24)
println(dataClassPlayer1.equals(dataClassPlayer2))
// true
println(dataClassPlayer1.hashCode())
// -1907803220
println(dataClassPlayer2.hashCode())
// -1907803220
另外一个类的hashCode字节码如下
image.png
- uva Excuses, Excuses!
- React第三方组件5(状态管理之Redux的使用④TodoList下)
- 2017/6/9-Python文件读写的方法
- React第三方组件5(状态管理之Redux的使用③TodoList中)
- R语言在收入不平等指标测度上的应用~
- React第三方组件5(状态管理之Redux的使用②TodoList上)
- sscanf
- sprintf的用法
- 01背包精讲
- uva Andy's First Dictionary
- UVA Hangman Judge
- shiny动态仪表盘应用——中国世界自然文化遗产可视化案例
- Decode the tape
- poj To the Max
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FFmpeg--简介
- 推荐系统中的常用算法——DeepWalk算法
- TypeError: cannot unpack non-iterable NoneType object
- 原型模式
- Spring 整合 Mybatis
- 数据库PostrageSQL-关闭服务器
- 快速配置Azure DevOps代理服务器
- 数据库PostrageSQL-管理内核资源
- airtest操作夜神模拟器adb冲突解决办法
- 数据库PostrageSQL-启动数据库服务器
- 数据库PostrageSQL-PostgreSQL用户账户创建一个数据库集簇
- 轻松上手SpringBoot Security + JWT Hello World示例
- [Go] Golang发送http GET请求
- Windows系统快速安装Superset 0.37
- 商业数据分析从入门到入职(3)Excel进阶应用