前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin---data class

Kotlin---data class

作者头像
None_Ling
发布2020-07-29 15:39:10
6180
发布2020-07-29 15:39:10
举报
文章被收录于专栏:Android相关

Data类与普通类的区别

  • toString函数会被复写为打印具体属性的值
  • 新增components方法 , 获取对应属性的值
  • 新增copy方法 , 可以用来修改具体属性的值
  • 重写了hashCode方法 , 不再比较对象引用 , 而是比较对象的值
代码语言:javascript
复制
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方法则打印出地址
代码语言:javascript
复制
println(player.toString())
// PlayerClass@27c170f0

println(dataClassPlayer.toString())
// PlayerDataClass(name=Alan, age=18)

另外一个测试类的toString字节码如下

image.png

新增getComponets函数
  • data类新增属性的component方法
  • component1代表第一个属性 , components代表第二个属性
代码语言:javascript
复制
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函数 , 可以设置属性的值
代码语言:javascript
复制
val clonedDataClassPlayer = dataClassPlayer.copy(age = 30)
println(clonedDataClassPlayer.age)
// clonedDataClassPlayer.age=30

其实也是通过解析函数 , 然后创造一个新的对象赋值返回.

copy函数的字节码

复写hashCode函数
  • data类复写hashCode函数 , 比较对象属性的值 , 而非地址
代码语言:javascript
复制
// 非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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Data类与普通类的区别
    • 重写toString函数
      • 新增getComponets函数
        • 新增copy函数
          • 复写hashCode函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档