kotlin中數(shù)據(jù)類重寫setter getter的正確方法
概述
在開發(fā)過(guò)程中,經(jīng)常會(huì)創(chuàng)建一些數(shù)據(jù)里,其沒(méi)有任何邏輯功能,僅僅來(lái)用來(lái)保存數(shù)據(jù)。在Kolin中,將這些類統(tǒng)一稱為數(shù)據(jù)類,用關(guān)鍵字data標(biāo)記。
data class User(val name: String, val age: Int)
編譯器會(huì)根據(jù)主構(gòu)造器中聲明的全部屬性, 自動(dòng)推斷產(chǎn)生以下成員函數(shù):
- equals()/hashCode()函數(shù)對(duì),
- toString() 函數(shù), 輸出格式為 “User(name=John, age=42)” ,
- componentN() 函數(shù)群, 這些函數(shù)與類的屬性對(duì)應(yīng), 函數(shù)名中的數(shù)字 1 到 N, 與屬性的聲明順序一致,
- copy() 函數(shù)
如果在該數(shù)據(jù)類或者基類中重寫了以上某個(gè)成員函數(shù),將不會(huì)再自動(dòng)推斷,以重寫的為準(zhǔn)。
前言
kotlin的數(shù)據(jù)類,由于其內(nèi)部封裝了getter和setter方法,極大地簡(jiǎn)化了我們的編程代碼,但同時(shí)其不能像java那樣方便的重寫getter或者setter方法,也給大家造成了一定的麻煩。
舉個(gè)例子:
data class OrderBean(val createTime: Long)
后端返回的訂單數(shù)據(jù)中,createTime這個(gè)字段是長(zhǎng)整型的時(shí)間戳,但是前端需要轉(zhuǎn)成yyyy-MM-dd這種格式,或者yyyy年MM月dd日這種,再或者更加友好一點(diǎn),根據(jù)時(shí)間段,轉(zhuǎn)成1小時(shí)前、2天前、一周前這種,在實(shí)際開發(fā)中都是常有的情況,在Java中我們可以很方便的在getter方法中做這些處理,但是kotlin的getter方法都是內(nèi)部封裝的,并不直接支持重寫,我看到網(wǎng)上有些答案是像這樣處理的:
data class OrderBean(val _createTime: Long){
val createTime:String
get() = { ...do something }
}
這樣處理其實(shí)并沒(méi)有真正改變createTime的值,反而會(huì)造成一些更大的麻煩,比如,數(shù)據(jù)類中自動(dòng)生成的equals(),toString()等一些方法還是會(huì)沿用長(zhǎng)整型的值,而且當(dāng)你做某些值對(duì)比的時(shí)候,會(huì)產(chǎn)生一些不可預(yù)測(cè)的結(jié)果。
正確的姿勢(shì)
有以下三種,你可以根據(jù)自己的業(yè)務(wù)邏輯和團(tuán)隊(duì)的話語(yǔ)權(quán)進(jìn)行選擇:
- 讓后端改:如果有可能的話,這是最合理,最恰當(dāng)?shù)姆绞?,后端直接返回我們需要的字段形式,?jié)省了移動(dòng)端,web端,小程序端等每端各寫一套邏輯的時(shí)間,并且萬(wàn)一哪段比較坑,實(shí)現(xiàn)出來(lái)的時(shí)間跟你們不一樣,可能你們每個(gè)都要復(fù)查一遍。另外,后端寫的話,一旦需求變更,后端處理起來(lái)要更加簡(jiǎn)單方便。
- 不用data class,使用常規(guī)的class:不要拘泥于建議,誰(shuí)說(shuō)這些數(shù)據(jù)實(shí)體類就必須要用data class的,使用IDE去自動(dòng)生成,照樣可以,而且還實(shí)現(xiàn)了自己的完全控制。
- 另外創(chuàng)建一個(gè)安全的變量:如果在團(tuán)隊(duì)中實(shí)在人微言輕,有非要用data class,那就去另外創(chuàng)建一個(gè)變量,比如:
data class OrderBean(val createTime: Long){
val createTimeShow:String
get() = { ...do something }
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android 實(shí)現(xiàn)調(diào)用系統(tǒng)照相機(jī)拍照和錄像的功能
這篇文章主要介紹了Android 實(shí)現(xiàn)調(diào)用系統(tǒng)照相機(jī)拍照和錄像的功能的相關(guān)資料,需要的朋友可以參考下2016-11-11
android?viewpager實(shí)現(xiàn)輪播效果
這篇文章主要為大家詳細(xì)介紹了android?viewpager實(shí)現(xiàn)輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
android中WebView和javascript實(shí)現(xiàn)數(shù)據(jù)交互實(shí)例
這篇文章主要介紹了android中WebView和javascript實(shí)現(xiàn)數(shù)據(jù)交互實(shí)例,需要的朋友可以參考下2014-07-07
Android開發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法
Android開發(fā)文檔上專門有一小節(jié)解釋這個(gè)問(wèn)題。簡(jiǎn)單來(lái)說(shuō),Activity是負(fù)責(zé)與用戶交互的最主要機(jī)制,接下來(lái)為您詳細(xì)介紹2012-11-11
Android標(biāo)題欄最右邊添加按鈕的實(shí)例
這篇文章主要介紹了Android標(biāo)題欄最右邊添加按鈕的實(shí)例的相關(guān)資料,希望通過(guò)本文大家能掌握如何操作,需要的朋友可以參考下2017-09-09
android中colors.xml顏色設(shè)置資源文件的方法
這篇文章主要介紹了android中colors.xml顏色設(shè)置資源文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Android編程之TabWidget選項(xiàng)卡用法實(shí)例分析
這篇文章主要介紹了Android編程之TabWidget選項(xiàng)卡用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了TabWidget選項(xiàng)卡的具體實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下2015-12-12
android實(shí)現(xiàn)主動(dòng)連接和被動(dòng)連接的藍(lán)牙聊天功能
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)主動(dòng)連接和被動(dòng)連接的藍(lán)牙聊天功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06

