3.Kotlin-数据类 data class

一。数据类的概念
我们经常创建一些只保存数据的类。 在这些类中,一些标准函数往往是从数据机械推导而来的。在 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方法进行对象的比较


猜你喜欢

转载自blog.csdn.net/zmesky/article/details/80985111