概述
在開發過程中,經常會創建一些數據里,其沒有任何邏輯功能,僅僅來用來保存數據。在Kolin中,將這些類統一稱為數據類,用關鍵字data標記。
data class User(val name: String, val age: Int)
編譯器會根據主構造器中聲明的全部屬性, 自動推斷產生以下成員函數:
如果在該數據類或者基類中重寫了以上某個成員函數,將不會再自動推斷,以重寫的為準。
前言
kotlin的數據類,由于其內部封裝了getter和setter方法,極大地簡化了我們的編程代碼,但同時其不能像java那樣方便的重寫getter或者setter方法,也給大家造成了一定的麻煩。
舉個例子:
data class OrderBean(val createTime: Long)
后端返回的訂單數據中,createTime這個字段是長整型的時間戳,但是前端需要轉成yyyy-MM-dd這種格式,或者yyyy年MM月dd日這種,再或者更加友好一點,根據時間段,轉成1小時前、2天前、一周前這種,在實際開發中都是常有的情況,在Java中我們可以很方便的在getter方法中做這些處理,但是kotlin的getter方法都是內部封裝的,并不直接支持重寫,我看到網上有些答案是像這樣處理的:
data class OrderBean(val _createTime: Long){ val createTime:String get() = { ...do something }}
這樣處理其實并沒有真正改變createTime的值,反而會造成一些更大的麻煩,比如,數據類中自動生成的equals(),toString()等一些方法還是會沿用長整型的值,而且當你做某些值對比的時候,會產生一些不可預測的結果。
正確的姿勢
有以下三種,你可以根據自己的業務邏輯和團隊的話語權進行選擇:
data class OrderBean(val createTime: Long){ val createTimeShow:String get() = { ...do something }}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。
新聞熱點
疑難解答