文章目錄
-
- 前言
- 正文
-
- 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)