前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈Kotlin(五):data class的使用

浅谈Kotlin(五):data class的使用

作者头像
听着music睡
发布于 2021-12-24 06:16:25
发布于 2021-12-24 06:16:25
1.5K00
代码可运行
举报
文章被收录于专栏:Android干货Android干货
运行总次数:0
代码可运行

使用data class的一大好处就是不用自己写一堆toString()方法的代码了。

一个简单的类的写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User(var name : String, var age: Int) {
}

如果我们想打印这个类的一个对象的属性值,一般直接调用toString()

但是如果不重写,打印出来的就是对象的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var user = User()
user.name = "Alice"
user.age = 20
Log.i(Tag,"user -> $user")

打印结果:
com.mxqx.wankotlin.mvp.model.bean.User@ca1983c

那么想要看到具体的数据就要重写toString()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User(var name : String, var age: Int) {
    override fun toString(): String {
        return "User(name='$name', age=$age)"
    }
}

细看Java中也是如此写法,但是当类的属性值特别多的时候,toString()内容也会异常的多

Kotlin则提供data class的方式来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data class User(var name : String, var age: Int) {
}

则此时打印结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user -> User(name=Alice, age=25)

可见data class 的toString函数会被复写为打印具体属性的值

data class使用的一些限制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、主构造函数必须要至少有一个参数
2、主构造函数中的所有参数必须被标记为val或者var
3、数据类不能有以下修饰符:abstract,inner,open,sealed

/***********************************************************************************/

深入学习data class 和 class的区别

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、toString函数会被复写为打印具体属性的值
2、新增components方法 , 获取对应属性的值
3、新增copy方法 , 可以用来修改具体属性的值
4、重写了hashCode方法 , 不再比较对象引用 , 而是比较对象的值

第一条不再说明

components的用法为:

component1表示主构造方法中的第一个属性,component2表示主构造方法中的第二个属性,

若主构造方法中有n个参数,则提供component1...componentn

copy的用法为:

以原来的对象为模板拷贝一个新的对象,可以指定所有或部分参数的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var user = User("Alice",25)
 var copyUser1 = user.copy("Jason", 26) // 建一个新的对象,name和age都赋新值
 var copyUser2 = user.copy(age = 30);   // 建一个新的对象,指定age赋新值
 Log.i(Tag,"user -> $user")
 Log.i(Tag,"copyUser1 -> $copyUser1")
 Log.i(Tag,"copyUser2 -> $copyUser2")

打印结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user -> User(name=Alice, age=25)
copyUser1 -> User(name=Jason, age=26)
copyUser2 -> User(name=Alice, age=30)

hashCode的用法为:

data类复写hashCode函数 , 比较对象属性的值 , 而非地址

非data类比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User(var name : String, var age: Int ) {
}


var user1 = User("Alice",25)
var user2 = User("Alice", 25)
Log.i(Tag,"user1.equal(user2)->"+(user1.equals(user2)))

打印结果:
user1.equal(user2)->false

data类比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data class User(var name : String, var age: Int ) {
}


var user1 = User("Alice",25)
var user2 = User("Alice", 25)
Log.i(Tag,"user1.equal(user2)->"+(user1.equals(user2)))

打印结果:
user1.equal(user2)->true
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
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:
None_Ling
2020/07/29
6430
Kotlin---data class
kotlin中 data class 到底是个什么鬼
data class就是一个类中只包含一些数据字段,类似于vo,pojo,java bean。一般而言,我们在Java中定义了这个数据类之后要重写一下toString,equals等方法。要生成get,set方法。
乱码三千
2021/07/29
7760
浅谈Kotlin(三):类
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型、基本语法、代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言:   已经学习了前两篇文章,对Kotlin有了一个基本的认识,往后的文章开始深入介绍Kotlin的实战使用。   本篇介绍Kotlin中类的使用。 一、表现形式   首先看一段Java中定义类的形式,定义三个属性,每一个属性对应一个get、set方法,有一个toString()方法 /* * @author xqx * @
听着music睡
2018/06/08
3740
最强总结 | 带你快速搞定kotlin开发(中篇)
正如上面注释所写到的,Kotlin 中的类可以有一个 主构造器 (primary constructor), 以及一个或多个 次构造器 (secondary constructor). 主构造器是类头部的一部分, 位于类名称(以及可选的类型参数)之后,并且有一点与Java不同,就是在主构造器中我们可以直接声明成员属性。
吴延宝
2020/11/25
7350
最强总结 | 带你快速搞定kotlin开发(中篇)
Kotlin 机制你都了解吗?
kotlin 是静态类型的编程语言,运行于 jvm 之上。如果在编译时知道变量的类型,则语言是静态类型的,在运行时知道变量类型,则语言是动态类型。
网罗开发
2021/04/07
8550
Kotlin 机制你都了解吗?
Java面经——SE基础
面试Java必定会问到SE部分的基础知识,我也被问过很多次,这篇文章记录一些常问的问题和答案。
beifengtz
2019/06/17
6090
反射学习
代码仓库地址:https://gitee.com/cgd0526/demo/tree/master/src/main/java/com/example/test/%E5%8F%8D%E5%B0%84
晓果冻
2022/09/08
1950
Kotlin:这是一份全面 & 详细的 类使用 的语法学习指南
对于构造函数,Kotlin中类可有一个主构造函数 & 多个次构造函数,下面将详细说明。
Carson.Ho
2020/04/09
9800
Kotlin:这是一份全面 & 详细的 类使用 的语法学习指南
转向Kotlin——数据类和封闭类
数据类是Kotlin的一个语法糖。Kotlin编译器会自动为数据类生成一些成员函数,以提高开发效率。
蜻蜓队长
2018/08/03
1K0
在 Kotlin 的 data class 中使用 MapStruct
data class 的 copy() 是复制函数,能够复制一个对象的全部属性,也能复制部分的属性。
fengzhizi715
2020/08/31
2.3K0
通过反射创建对象大概有几种方式
常用方法摘要 返回值 方法说明 <U> Class<? extends U> asSubclass(Class<U> clazz)强制转换该 Class 对象,以表示指定的 class 对象所表示的类
艳艳代码杂货店
2021/09/26
1K0
Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
1:Scala之函数式编程学习笔记: 1:Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法: class User { private var name = "张三"; def hello(): Unit ={ println("hello : " + name) } //注:如果定义方法
别先生
2018/04/02
1.2K0
为什么重写 equals 方法时必须同时重写 hashCode 方法?
本文由 Java 中常见的面试题「为什么重写 equals 方法时必须同时重写 hashCode 方法?」所引出。渐进式探讨关于 hashCode 的三个问题:hashCode 方法的作用以及 hashCode 方法与 equals 方法的关系?为什么重写 equals 方法时必须同时重写 hashCode 方法?以及如何重写 hashCode 方法?
每周聚焦
2024/10/28
1600
为什么重写 equals 方法时必须同时重写 hashCode 方法?
面试官:换人!他连哈希扣的都不懂
相信你面试的时候,肯定被问过 hashCode 和 equals 相关的问题 。如:
烟雨星空
2020/06/23
7590
lombook注解使用
两条user数据,ID完全不一样,结果明显是错的,没有做id的equals判断,修改为:
2021/11/18
3530
C#中使用 record 的好处 因为好用所以推荐!
一晃距C# 9发布已经4年了,对于record关键字想必大家都不陌生了,不过呢发现还是有很多同学不屑于使用这个语法糖,确实,本质上 record 就是 class 的封装,能用 record 书写的类,那100%都是可以自己手撸出来的,但是呢有没有考虑 别人可能一分钟写好的代码你可能会需要数分钟才能完成.因此为了能有更多时间 摸鱼 ,强烈推荐不屑一顾的同学也能用起来!
郑子铭
2024/11/23
2250
C#中使用 record 的好处 因为好用所以推荐!
JDK源码阅读:ArrayList原理
查询快:由于数组在内存中是一块连续空间,因此可以根据地址+索引的方式快速获取对应位置上的元素。
鳄鱼儿
2024/05/21
1430
浅谈Go语言中的结构体struct &amp; 接口Interface &amp; 反射
结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;
李海彬
2018/07/26
1.1K0
浅谈Go语言中的结构体struct &amp; 接口Interface &amp; 反射
Android十八章:是时候在你项目用上greenDAO3GreenDao
GreenDao3.1.0使用案例包含(增删查改,升级数据库),3.+版本比2.+更加便捷生成DaoMaster和DaoSession 本文项目地址
ppjun
2018/09/05
6080
【15】JAVASE-常用工具类【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
1810
【15】JAVASE-常用工具类【从零开始学JAVA】
相关推荐
Kotlin---data class
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验