轉載請標明出處:https://blog.csdn.net/zhaoyanjun6/article/details/94649274
本文出自【趙彥軍的博客】
前言
在 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
定義一個對象
data class User (var id:Int,var name:String)
toString()
var user = User(0,"zhaoyanjun")
Log.e("zhaoyanjun:", "toString $user")
//輸出結果是:toString User(id=0, name=zhaoyanjun)
copy()
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)
個人微信號:zhaoyanjun125 , 歡迎關注