文章目录
-
- 前言
- 正文
-
- toString()
- copy()
在 kotlin 中我们定义一个模型类,比如 User 类 ,如下
class User (var id:Int,var name:String)
如果我们要打印输出
User
对象,那么输出的是这个对象的内存地址,如果我们想输出对象的字段,需要重写
toString
方法,如下:
class User (var id:Int,var name:String){
override fun toString(): String {
return "User(id=$id, name='$name')"
}
}
如果对象属性非常多的情况下,那么
toString
方法将变得非常臃肿,那么有没有简介的方法可以实现
toString
方法,答案是有的,那就是
data
关键字。
data class
算是
Kotlin
中一大闪光点,
data class
就是一个类中只包含一些数据字段,类似于
vo
,
pojo
java bean
。一般而言,我们在
Java
中定义了这个数据类之后要重写一下
toString,equals
等方法。要生成
get,set
方法。
然而在Kotlin中这些都不在需要自己手动去敲了,编译器在背后默默给我们生成了如下的东西:
- equals()/hashCode()
- toString()方法
- componentN()方法
- copy()方法
在申明一个
data class
有一些需要注意的事项。
- 主构造函数必须要至少有一个参数
- 主构造函数中的所有参数必须被标记为val或者var
- 数据类不能有以下修饰符:abstract,inner,open,sealed
- data class只能实现接口(Kotlin1.1以前的规则),现在也可以继承其它类
data class User (var id:Int,var name:String)
var user = User(0,"zhaoyanjun")
Log.e("zhaoyanjun:", "toString $user")
//输出结果是:toString User(id=0, name=zhaoyanjun)
var user = User(0,"zhaoyanjun")
var user2 = user.copy(id = 2)
Log.e("zhaoyanjun:", "toString $user $user2" )
//结果:toString User(id=0, name=zhaoyanjun) User(id=2, name=zhaoyanjun)