前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kotlin中 data class 到底是个什么鬼

kotlin中 data class 到底是个什么鬼

作者头像
乱码三千
发布2021-07-29 15:33:37
6330
发布2021-07-29 15:33:37
举报
文章被收录于专栏:乱码三千乱码三千

data class就是一个类中只包含一些数据字段,类似于vo,pojo,java bean。一般而言,我们在Java中定义了这个数据类之后要重写一下toString,equals等方法。要生成get,set方法。

然而在Kotlin中这些都不在需要自己手动去敲了,编译器在背后默默给我们生成了如下的东西:

  • equals()/hashCode()
  • toString()方法
  • componentN()方法
  • copy()方法
如何申明一个简单的数据类?有一下几点要求:
  • 主构造函数必须要至少有一个参数
  • 主构造函数中的所有参数必须被标记为val或者var
  • 数据类不能有以下修饰符:abstract,inner,open,sealed
  • data class只能实现接口(Kotlin1.1以前的规则),现在也可以继承其它类
代码语言:javascript
复制
data class User(var id: Int, var name: String)

就这么一行代码,你已然拥有了一个数据类

主构造函数中的所有参数必须被标记为var或者val,var就表示可读写,val就表示只读,这就相当于表明了数据字段的访问权限

componentN()方法是干嘛用的?

在主构造函数中有多少个参数,就会依次生成对应的component1,component2,component3……这些函数返回的就是对应字段的值

componentN函数是用来实现解构申明的

代码语言:javascript
复制
data class User(var id: Int,var name:String)
fun main(args: Array<String>) {
    var user: User = User(123, "liuliqianxiao")
    var (id,name) = user//多重赋值
    print("$id,$name")
}

拿上面的例子来说,给id赋值,其实调用的是user.component1(),给name赋值其实调用的是component2()函数。

有了这个解构申明,想在一个函数中返回多个结果,就可以申明一个简单的数据类来返回了,然后取值也很方便。

copy函数

默认生成的copy函数就是用现在的数据字段生成了一个新的对象。

代码语言:javascript
复制
fun copy(id: Int = this.id,name: String = this.name) = User(id,name)

如果只想改变其中的某些字段,就可以在调用copy的时候采用命名参数的方法进行调用

代码语言:javascript
复制
fun main(args: Array<String>) {
    var user: User = User(123, "liuliqianxiao")
    var other: User = user.copy(name = "mdzz")//只想改变名字
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱码三千 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何申明一个简单的数据类?有一下几点要求:
  • componentN()方法是干嘛用的?
  • copy函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档