数据类
我们经常会创建一些保存数据的类,Kotlin 使用 data 关键字声明一个数据类,解决 JavaBean 极其臃肿的写法。主构造中声明的属性会默认创建以下函数(注意类体中声明的不会):
- equals()、hashCode()
- toString(),格式是:User(name=张三, age=18)
- componentN(),按声明顺序对应所有属性
- copy()
data class User(var id:Long, var name:String, var age:Int){ }
//创建实例
val user = User(123456, "张三", 18)
//通常取出数据
val id = user.id
//使用解构一次声明多个变量
var (_, name, age) = user //必须按顺序声明,可以使用下划线忽略不需要的属性
//使用变量
name = "李四"
println(name) //打印:李四
println(age) //打印:18
//再想创建一个User只改变年龄
val user2 = user.copy(age = 31)
println(user) //打印:User(id=123456, name='张三', age=18)
println(user2) //打印:User(id=123456, name='张三', age=31)
解构 componentN()
就是把一个对象(的数据)一次性拆分成多个变量。数据类默认生成 componentN() 函数,N对应主构造中属性的个数。普通类也可以使用解构,需要自行手动声明 operator componentN() 函数。?
class User(var id: Long, var name: String, var age: Int) {
operator fun component1() = id
operator fun component2() = name
operator fun component3() = age
}
复制 copy()
很多情况下,我们需要复制一个对象,只改变部分数据而其它保持不变,就可以使用 copy() 函数。
class User(var id: Long, var name: String, var age: Int) {
fun copy(id: Long = this.id, name: String = this.name, age: Int = this.age) = User(id, name, age)
}
|