国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

kotlin中數據類重寫setter getter的正確方法

2024-07-21 23:03:47
字體:
來源:轉載
供稿:網友

概述

在開發過程中,經常會創建一些數據里,其沒有任何邏輯功能,僅僅來用來保存數據。在Kolin中,將這些類統一稱為數據類,用關鍵字data標記。

data class User(val name: String, val age: Int)

編譯器會根據主構造器中聲明的全部屬性, 自動推斷產生以下成員函數:

  • equals()/hashCode()函數對,
  • toString() 函數, 輸出格式為 “User(name=John, age=42)” ,
  • componentN() 函數群, 這些函數與類的屬性對應, 函數名中的數字 1 到 N, 與屬性的聲明順序一致,
  • copy() 函數

如果在該數據類或者基類中重寫了以上某個成員函數,將不會再自動推斷,以重寫的為準。

前言

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()等一些方法還是會沿用長整型的值,而且當你做某些值對比的時候,會產生一些不可預測的結果。

正確的姿勢

有以下三種,你可以根據自己的業務邏輯和團隊的話語權進行選擇:

  • 讓后端改:如果有可能的話,這是最合理,最恰當的方式,后端直接返回我們需要的字段形式,節省了移動端,web端,小程序端等每端各寫一套邏輯的時間,并且萬一哪段比較坑,實現出來的時間跟你們不一樣,可能你們每個都要復查一遍。另外,后端寫的話,一旦需求變更,后端處理起來要更加簡單方便。
  • 不用data class,使用常規的class:不要拘泥于建議,誰說這些數據實體類就必須要用data class的,使用IDE去自動生成,照樣可以,而且還實現了自己的完全控制。
  • 另外創建一個安全的變量:如果在團隊中實在人微言輕,有非要用data class,那就去另外創建一個變量,比如:
data class OrderBean(val createTime: Long){ val createTimeShow:String  get() = { ...do something }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 承德县| 怀安县| 凉山| 邯郸市| 通江县| 平凉市| 伊宁县| 鄯善县| 门头沟区| 沙坪坝区| 南开区| 翁牛特旗| 汤原县| 玛纳斯县| 松江区| 兴隆县| 龙山县| 印江| 兰西县| 平江县| 射阳县| 宝丰县| 门源| 银川市| 攀枝花市| 雷州市| 澄城县| 绥阳县| 扶余县| 惠东县| 舞钢市| 新沂市| 巴彦淖尔市| 庆元县| 高平市| 弋阳县| 金川县| 嘉定区| 格尔木市| 高唐县| 库尔勒市|