当前位置:网站首页>Kotlin征途之data class [数据类]
Kotlin征途之data class [数据类]
2022-04-23 06:08:00 【Lance_w】
Kotlin之data class [数据类]
kotlin正常声明一个类的方式class [类名],与java类似
kotlin对类的声明还可以用data关键字来标记那些只用来保存数据的类,将其称之为数据类
eg:
data class User constructor(val name: String) {
var nickName: String = ""
}
例如上面的user类就是声明的一个数据类
数据类的声明必须满足下列的要求:
-
主构造函数至少需要有一个参数
-
主构造函数的所有参数必须要标记为val或者var
-
数据类不能是抽象、开发、密封或者内部的
为什么data class要有上面的约束呢?
我们来看下声明一个普通的class类,满足上面的要求和不满足上面的要求存在什么差别
```kotlin
class User constructor(name: String) {
}
/** 上述的user类,主构造函数里面的参数name是不带val、var * 表示该name仅仅只是作为构造函数的传入参数,该变量仅能在init初始化中获取到 * 而如果需要将name声明成类变量,需要做如下修改 */
class User constructor(name1: String) {
var name: String = ""
init {
name = name1
}
}
//而上述的成员变量的声明可以放到主构造函数上去完成,即
class User constructor(var name: String) {
}
所以上面的限制要求使数据类在主构造函数声明了包含的成员变量,然后编译器通过这些声明的成员变量为我们生成了一些特定的功能。
官方文档也指出:
对于data class编译器自动从主构造函数中声明的所有属性导出以下成员:
equals()
/hashCode()
对;toString()
格式是"User(name=John, age=42)"
;componentN()
函数 按声明顺序对应于所有属性;copy()
函数
也就是data生成的equals、hashCode、toString方法都是根据主构造函数中声明的成员变量来完成对应实现的。
可以看如下例子:
//声明如下的数据类
data class User constructor(var name: String) {
var nickName: String = ""
}
val user1 = User("Lance")
user1.nickName = "ming"
val user2 = User("Lance")
user2.nickName = "ning"
user1==user2 因为equals、hashCode都是根据name,即此处赋值的Lance去比较的
同时user1、user2的toString方法返回均为User(name=Lance)
如果修改上面的code为
data class User constructor(var name: String, var nickName: String) {
}
val user1 = User("Lance", "ming")
val user2 = User("Lance", "ning")
user1!=user2 因为equals、hashCode都是根据name和nickName去比较的
同时user1、user2的toString方法返回分别为User(name=Lance,nickName=ming)、User(name=Lance,nickName=ning)
版权声明
本文为[Lance_w]所创,转载请带上原文链接,感谢
https://blog.csdn.net/wsq_tomato/article/details/119420989
边栏推荐
- 10g数据库使用大内存主机时不能启动的问题
- [SM8150][Pixel4]LCD驱动
- 基于BottomNavigationView实现底部导航栏
- Prometheus alarm record persistence (historical alarm saving and Statistics)
- SQL中 with函数的详解与用法
- 窗口分析函数LAST_VALUE,FIRST_VALUE,lag,lead
- launcher隐藏不需要显示的app icon
- 发布自定义插件到本地服务器
- Itop4412 LCD backlight drive (PWM)
- How does thanos configure different data retention durations for different tenants
猜你喜欢
随机推荐
Abnormal record-15
useReducer基本用法
launcher隐藏不需要显示的app icon
Django::Did you install mysqlclient?
Abnormal record-18
iTOP4412 FramebufferNativeWindow(4.0.3_r1)
mysql和pg库遇到冲突数据时的两种处理方式
ORACLE表有逻辑坏块时EXPDP导出报错排查
How does thanos configure different data retention durations for different tenants
BottomSheetDialogFragment + ViewPager+Fragment+RecyclerView 滑动问题
测试oracle库700万数据量普通方式创建索引所需时间
取消远程依赖,用本地依赖
组件化学习(2)Arouter原理学习
B站用户视频观看记录的存储方案
iTOP4412 SurfaceFlinger(4.0.3_r1)
Exception record-7
AVD Pixel_ 2_ API_ 24 is already running. If that is not the case, delete the files at C:\Users\admi
Exception record-14
iTOP4412 LCD背光驱动(PWM)
Abnormal record-12