3.Kotlin-数据类 data class

本文介绍了Kotlin的数据类,强调了其主构造函数的规则,包括至少一个参数且参数需标记为val或var,不能使用特定修饰符。此外,讨论了数据类在Kotlin 1.1之前只能实现接口,现在则可以继承其他类。还提到了结构相等的概念,即通过equals()函数进行比较的对象比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。数据类的概念
我们经常创建一些只保存数据的类。 在这些类中,一些标准函数往往是从数据机械推导而来的。在 Kotlin 中,这叫做 数据类 并标记为  data,类似于Javabean
为了确保自动生成的代码一致性和有意义,数据类必须满足一下要求:
  • 主构造函数必须要至少有一个参数
  • 主构造函数中的所有参数必须被标记为val或者var
  • 数据类不能有以下修饰符:abstract,inner,open,sealed
  • data class只能实现接口(Kotlin1.1以前的规则),现在也可以继承其它类

数据类的语法实例:
data class User(val name:String, val age:Int)
编译器会为数据类自动生成以下函数:
equals()
toString()
componentN()
copy()
如果数据类需要无参构造函数,则所有属性必须有默认值:
data class User(var name:String = "", val age:Int=0)

二。copy函数
当要复制一个对象,只改变一些属性,但其余不变,copy()就是为此而生:
data class User(val name:String, val age:Int)
fun main(args:Array<String>){
val user = User(name="kotlin",age=1)
val user1 = user.copy("kotlin1")//传递第一参数, 第二参数默认
val user2 = user.copy("kotlin2",2)//传递所有参数
val user3 = user.copy(age=3)//命名参数,传递指定参数
}
三.解构声明
componentN函数-解构声明
编译器为数据类(data class)自动声明componentN()函数,可直接用解构声明
data class User(val name:String, val age:Int)
fun main(args:Array<String>){
val user = User("kotlin",1)
val (name,age) = user
printlin("$name, $age")//输出 “kotlin,1”
}
有时吧一个对象解构成很多变量会很方便,一个解构声明会被编译成一下代码:
val name = user.component1()
val age = user.component2()

解构声明也可以用在for循环中
for((a,b) in collection){
}

四.等号 == 和 ===
kotlin有两种相等性
1.===,引用相等,两个引用指向同一个对象,比较的是引用地址是否相等。

2.== ,结构相等,通过equals()函数比较,因此可以重写equals方法进行对象的比较


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值