kotlin 數(shù)據(jù)類重寫setter getter的正確解決辦法

kotlin的數(shù)據(jù)類,由于其內(nèi)部封裝了getter和setter方法,極大地簡化了我們的編程代碼,但同時其不能像java那樣方便的重寫getter或者setter方法,也給大家造成了一定的麻煩。

舉個例子:

data class OrderBean(val createTime: Long)

后端返回的訂單數(shù)據(jù)中,createTime這個字段是長整型的時間戳,但是前端需要轉(zhuǎn)成yyyy-MM-dd這種格式,或者yyyy年MM月dd日這種,再或者更加友好一點,根據(jù)時間段,轉(zhuǎn)成1小時前、2天前一周前這種,在實際開發(fā)中都是常有的情況,在Java中我們可以很方便的在getter方法中做這些處理,但是kotlin的getter方法都是內(nèi)部封裝的,并不直接支持重寫,我看到網(wǎng)上有些答案是像這樣處理的:

data class OrderBean(val _createTime: Long){
    val createTime:String
        get() = { ...do something }
}

這樣處理其實并沒有真正改變createTime的值,反而會造成一些更大的麻煩,比如,數(shù)據(jù)類中自動生成的equals(),toString()等一些方法還是會沿用長整型的值,而且當(dāng)你做某些值對比的時候,會產(chǎn)生一些不可預(yù)測的結(jié)果。

正確的姿勢

有以下三種,你可以根據(jù)自己的業(yè)務(wù)邏輯和團隊的話語權(quán)進行選擇:

  • 讓后端改:如果有可能的話,這是最合理,最恰當(dāng)?shù)姆绞?,后端直接返回我們需要的字段形式,?jié)省了移動端,web端,小程序端等每端各寫一套邏輯的時間,并且萬一哪段比較坑,實現(xiàn)出來的時間跟你們不一樣,可能你們每個都要復(fù)查一遍。另外,后端寫的話,一旦需求變更,后端處理起來要更加簡單方便。

  • 不用data class,使用常規(guī)的class不要拘泥于建議,誰說這些數(shù)據(jù)實體類就必須要用data class的,使用IDE去自動生成,照樣可以,而且還實現(xiàn)了自己的完全控制。

  • 另外創(chuàng)建一個安全的變量:如果在團隊中實在人微言輕,有非要用data class,那就去另外創(chuàng)建一個變量,比如:

data class OrderBean(val createTime: Long){
    val createTimeShow:String
        get() = { ...do something }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,192評論 8 265
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,669評論 9 118
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 如果有來世 我愿變成媽媽河坡前的一棵 梔子花樹 清晨 看著媽媽起床 晚上 枕著媽媽入夢 如果有時間 媽媽會培我泥土...
    恰媽閱讀 339評論 3 7
  • 每個人都有想住得體面的愿望,尤其在我們這個看中家庭文化的國家。 盡管房價越來越高,城市越來越擁擠,但每個人的內(nèi)心都...
    vidahouse玩家生活閱讀 436評論 0 0

友情鏈接更多精彩內(nèi)容