首發(fā)于公眾號(hào): DSGtalk1989
9.Kotlin 數(shù)據(jù)類與密封類
-
數(shù)據(jù)類
在class前面加上
data
關(guān)鍵字摸屠,這個(gè)類就變成了數(shù)據(jù)類,會(huì)自動(dòng)添加我們一般在java中需要添加的方法數(shù)據(jù)類不能繼承宴倍,也不能被繼承身腻。
數(shù)據(jù)類的主構(gòu)造函數(shù)不能無參
數(shù)據(jù)類的
copy
方法可以直接進(jìn)行修改var s = Student("Tom", 23) var a = s.copy(age = 18)
-
密封類
又叫做密閉類诗越,一般用來替代java中枚舉類
sealed class UiOp { object Show: UiOp() object Hide: UiOp() } fun execute(view: View, op: UiOp) = when (op) { UiOp.Show -> view.visibility = View.VISIBLE UiOp.Hide -> view.visibility = View.GONE }
實(shí)際上我們不一定要內(nèi)部繼承的方式驱犹,卸載外面也行嘲恍,不要被這種形式拘泥。
上面的例子就是我們定力了枚舉展示和隱藏雄驹,然后通過
when
的方式佃牛,去操作View
。單單這個(gè)例子是看不出密閉類的優(yōu)越性的医舆,如果我們還需要對(duì)
View
進(jìn)行移動(dòng)的話俘侠,枚舉就做不到了象缀,但是密閉類可以。sealed class UiOp object Show: UiOp() object Hide: UiOp() class TranslateX(val px: Float): UiOp() class TranslateY(val px: Float): UiOp() fun execute(view: View, op: UiOp) = when (op) { UiOp.Show -> view.visibility = View.VISIBLE UiOp.Hide -> view.visibility = View.GONE // 這個(gè) when 語句分支不僅告訴 view 要水平移動(dòng)爷速,還告訴 view 需要移動(dòng)多少距離央星,這是枚舉等 Java 傳統(tǒng)思想不容易實(shí)現(xiàn)的 //注意這里的is is UiOp.TranslateX -> view.translationX = op.px UiOp.TranslateY() -> view.translationY = op.px }
所以密閉類在我看來就是java枚舉的拓展
并且密閉類只能在一個(gè)文件中進(jìn)行申明
封閉類如果是class的話,用when匹配必須要加 is 或者 直接生成對(duì)象()
Kotlin學(xué)習(xí)筆記之 1 基礎(chǔ)語法
Kotlin學(xué)習(xí)筆記之 2 基本數(shù)據(jù)類型
Kotlin學(xué)習(xí)筆記之 4 循環(huán)控制
Kotlin學(xué)習(xí)筆記之 5 類和對(duì)象
Kotlin學(xué)習(xí)筆記之 8 擴(kuò)展
Kotlin學(xué)習(xí)筆記之 9 數(shù)據(jù)類與密封類
Kotlin學(xué)習(xí)筆記之 12 對(duì)象表達(dá)式和對(duì)象聲明
Kotlin學(xué)習(xí)筆記之 13 基礎(chǔ)操作符run遍希、with等曼、let里烦、also凿蒜、apply
Kotlin學(xué)習(xí)筆記之 14 包與導(dǎo)入
Kotlin學(xué)習(xí)筆記之 15 伴生對(duì)象
Kotlin學(xué)習(xí)筆記之 18 函數(shù)
Kotlin學(xué)習(xí)筆記之 19 高階函數(shù)與 lambda 表達(dá)式
Kotlin學(xué)習(xí)筆記之 20 內(nèi)聯(lián)函數(shù)
Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明
Kotlin學(xué)習(xí)筆記之 28 協(xié)程基礎(chǔ)
Kotlin學(xué)習(xí)筆記之 29 上下文與調(diào)度器
Kotlin學(xué)習(xí)筆記之 30 協(xié)程取消與超時(shí)
Kotlin學(xué)習(xí)筆記之 31 協(xié)程掛起函數(shù)的組合