這篇文章將為大家詳細講解有關(guān)kotlin中數(shù)據(jù)類重寫setter getter的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
在蓮池等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站制作,蓮池網(wǎng)站建設(shè)費用合理。
概述
在開發(fā)過程中,經(jīng)常會創(chuàng)建一些數(shù)據(jù)里,其沒有任何邏輯功能,僅僅來用來保存數(shù)據(jù)。在Kolin中,將這些類統(tǒng)一稱為數(shù)據(jù)類,用關(guān)鍵字data標記。
data class User(val name: String, val age: Int)
編譯器會根據(jù)主構(gòu)造器中聲明的全部屬性, 自動推斷產(chǎn)生以下成員函數(shù):
equals()/hashCode()函數(shù)對,
toString() 函數(shù), 輸出格式為 “User(name=John, age=42)” ,
componentN() 函數(shù)群, 這些函數(shù)與類的屬性對應(yīng), 函數(shù)名中的數(shù)字 1 到 N, 與屬性的聲明順序一致,
copy() 函數(shù)
如果在該數(shù)據(jù)類或者基類中重寫了以上某個成員函數(shù),將不會再自動推斷,以重寫的為準。
前言
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()等一些方法還是會沿用長整型的值,而且當你做某些值對比的時候,會產(chǎn)生一些不可預(yù)測的結(jié)果。
正確的姿勢
有以下三種,你可以根據(jù)自己的業(yè)務(wù)邏輯和團隊的話語權(quán)進行選擇:
讓后端改:如果有可能的話,這是最合理,最恰當?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 } }
關(guān)于“kotlin中數(shù)據(jù)類重寫setter getter的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。