Kotlin 類(lèi)5 - Data Class

Kotlin 類(lèi)5 - Data Class


在 Kotlin 中凌箕,不需要自己動(dòng)手去寫(xiě)一個(gè) JavaBean鸟妙,可以直接使用 DataClass纤勒,使用 DataClass 編譯器會(huì)默默地幫我們生成以下函數(shù)

equals()
hashCode()
toString()
componentN()
copy()

1. data class 的使用

  1. 定義一個(gè) data class 類(lèi)
data class Country(var id: Int, var name: String, var continent: String)
  1. 編譯器自動(dòng)實(shí)現(xiàn)的函數(shù)舉例
  • toString()
var china = Country(0, "中國(guó)", "Asia")
println(china) // Country(id=0, name=中國(guó), continent=Asia)
  • copy()
var japan = china.copy(id = 1, name = "日本")
println(japan) // Country(id=1, name=日本, continent=Asia)
  • componentN()
val (id, name, continent) = china
println("$id --> $name赋朦,$continent") // 0 --> 中國(guó)辉川,Asia

2. data class 使用的坑

由于 data class 被編譯器生成 JavaBean 時(shí)诅愚,是一個(gè) final 類(lèi)寒锚,并且沒(méi)有無(wú)參的構(gòu)造函數(shù),所以在使用過(guò)程非常不方便违孝,但是我們可以利用官方給出的插件來(lái)解決這些問(wèn)題(noarg刹前、allopen

1. 在 Android 中使用 Gradle 的做法

  1. 添加依賴(lài)
buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}
  1. 將依賴(lài)應(yīng)用到項(xiàng)目中
apply plugin: 'kotlin-noarg'
apply plugin: 'kotlin-allopen'
  1. 創(chuàng)建一個(gè) annotation
package mm.learn.kotlin._001_class.annotations;

annotation class NoArgOpenDataClass
  1. 添加配置
noArg{
    annotation("mm.learn.kotlin._001_class.annotations.NoArgOpenDataClass")
}

allOpen{
    annotation("mm.learn.kotlin._001_class.annotations.NoArgOpenDataClass")
}
  1. 將注解用到 data class 中
@NoArgOpenDataClass
data class Country(var id: Int, var name: String, var continent: String)
  1. 經(jīng)過(guò)上面5個(gè)步驟,編譯器就會(huì)幫我去掉 final 關(guān)鍵字雌桑,并且生成一個(gè)無(wú)參的構(gòu)造方法喇喉,但是由于是在編譯器做的操作,所以在源代碼中還是無(wú)法直接使用無(wú)參的構(gòu)造函數(shù)校坑,只能通過(guò)反射來(lái)使用拣技。

2. 在后臺(tái)項(xiàng)目中用 Maven

  1. 在項(xiàng)目目錄中創(chuàng)建一個(gè)注解的目錄 anno(我的完整包名是 mm.tm.jxcos.anno
  2. 在該目錄下創(chuàng)建一個(gè) NoArg 的注解類(lèi)
package mm.tm.jxcos.anno


annotation class NoArg
  1. 配置 pom.xml 文件,添加 noarg 插件(注意標(biāo)簽結(jié)構(gòu)和 configuration 標(biāo)簽里面的內(nèi)容)
<build>
    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>${kotlin.version}</version>
            <configuration>
                <compilerPlugins>
                    <!-- spring_kotlin官方插件耍目,為aop代理類(lèi)去final關(guān)鍵字 -->
                    <plugin>spring</plugin>
                    <!-- kotlin官方插件膏斤,為被注解的指定類(lèi)添加無(wú)參構(gòu)造方法 -->
                    <plugin>no-arg</plugin>
                </compilerPlugins>
                <pluginOptions>
                    <option>no-arg:annotation=mm.tm.jxcos.anno.NoArg</option>
                    <!-- 在合成的構(gòu)造函數(shù)中調(diào)用實(shí)例初始化器 -->
                    <!-- <option>no-arg:invokeInitializers=true</option> -->
                </pluginOptions>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 在數(shù)據(jù)類(lèi)中使用
package mm.tm.jxcos.domain

import mm.tm.jxcos.anno.NoArg

@NoArg
data class CommIdReq(val id: Int)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邪驮,隨后出現(xiàn)的幾起案子莫辨,更是在濱河造成了極大的恐慌,老刑警劉巖耕捞,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衔掸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俺抽,警方通過(guò)查閱死者的電腦和手機(jī)敞映,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磷斧,“玉大人振愿,你說(shuō)我怎么就攤上這事捷犹。” “怎么了冕末?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵萍歉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我档桃,道長(zhǎng)枪孩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任藻肄,我火速辦了婚禮蔑舞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘹屯。我一直安慰自己攻询,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布州弟。 她就那樣靜靜地躺著钧栖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婆翔。 梳的紋絲不亂的頭發(fā)上拯杠,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音浙滤,去河邊找鬼阴挣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纺腊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茎芭,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼揖膜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了梅桩?” 一聲冷哼從身側(cè)響起壹粟,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宿百,沒(méi)想到半個(gè)月后趁仙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垦页,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年雀费,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痊焊。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盏袄,死狀恐怖忿峻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辕羽,我是刑警寧澤逛尚,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刁愿,受9級(jí)特大地震影響绰寞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铣口,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一克握、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枷踏,春花似錦菩暗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至掏熬,卻和暖如春佑稠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旗芬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工舌胶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疮丛。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓幔嫂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親誊薄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子履恩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來(lái) Kotlin 呢蔫,快速學(xué)習(xí)Kotlin切心! 什么是Kotlin? Kotlin 是種靜態(tài)類(lèi)型編程...
    任半生囂狂閱讀 26,211評(píng)論 9 118
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔片吊,今天18年5月份再次想寫(xiě)文章绽昏,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,762評(píng)論 2 9
  • 面向?qū)ο缶幊蹋∣OP) 在前面的章節(jié)中全谤,我們學(xué)習(xí)了Kotlin的語(yǔ)言基礎(chǔ)知識(shí)、類(lèi)型系統(tǒng)联予、集合類(lèi)以及泛型相關(guān)的知識(shí)啼县。...
    Tenderness4閱讀 4,444評(píng)論 1 6
  • 我?guī)е鴦e人的秘密 來(lái)到許多年前的七月 午后驕陽(yáng)似火 在木門(mén)紅磚的門(mén)口 看見(jiàn)我正和鄰家小孩 泡在巨大的澡盆里 陽(yáng)光直...
    12個(gè)字符閱讀 307評(píng)論 0 0
  • 在生活中,有很多疾病都是由陽(yáng)氣不足造成的子刮,比如癌癥威酒、不孕不育、肥胖挺峡、內(nèi)分泌紊亂葵孤、腎病等等。 內(nèi)經(jīng)有云:陰成行橱赠、陽(yáng)化...
    de7c69bfb64b閱讀 189評(píng)論 0 2