
前言
- 面向?qū)ο缶幊桃巡皇鞘裁葱迈r概念,你也許非常熟悉 類 的抽象機(jī)制。Kotlin 這方面的概念你也許會(huì)感覺(jué)似曾相似,但是你會(huì)發(fā)現(xiàn)許多常見(jiàn)任務(wù)使用更少的代碼就能完成。
Person
-
首先我們來(lái)看一個(gè)簡(jiǎn)單的 JavaBean 類 Person,只有一個(gè)屬性 name
public class Person { private final String name; public Person(String name) { this.name = name; } public String getName() { return name; } } -
這時(shí),你大可以使用工具 Convert Java File to Kotlin File 來(lái)將 Java 代碼轉(zhuǎn)換成 Kotlin 代碼。
class Person(val name: String) 很簡(jiǎn)單的一行代碼,這種類通常被叫做值對(duì)象,許多語(yǔ)言都提供簡(jiǎn)明語(yǔ)法還聲明它們。
屬性
在 Java 中數(shù)據(jù)實(shí)體通常都是一個(gè)私有字段保存數(shù)據(jù),并提供訪問(wèn)器方法:一個(gè) getter ,可能還有一個(gè) setter 進(jìn)行數(shù)據(jù)訪問(wèn)及變更。這樣的組合一般被叫做屬性。
-
在 Kotlin 中,聲明一個(gè)屬性和聲明一個(gè)變量一樣,使用 val 和 var 關(guān)鍵字,val 是只讀的,var 是可變的。
class Person { val name: String // 只讀屬性,生成一個(gè)簡(jiǎn)單的 getter var isMarried: Boolean // 可寫(xiě)屬性,生成一個(gè)簡(jiǎn)單的 getter 和 setter } -
基本上,Kotlin 中聲明屬性的時(shí)候,你就聲明了對(duì)應(yīng)的訪問(wèn)器方法,只是簡(jiǎn)單的獲取屬性、設(shè)置屬性,如果有需要,可以聲明自定義的訪問(wèn)器。
/* Java */ Person person = new Person("Bob", true); System.out.println(person.getName()); // 調(diào)用訪問(wèn)器方法 System.out.println(person.isMerried()); >> Bob >> true /* Kotlin */ val person = Person("Bob", true) println(person.name) // 可以直接訪問(wèn)屬性,但調(diào)用的是 getter println(person.isMarried) >> Bob >> true
自定義訪問(wèn)器
如果你聲明了一個(gè)矩形,它能夠判斷自己是否是正方形。
-
Kotlin 中不需要一個(gè)單獨(dú)的字段來(lái)存儲(chǔ)這個(gè)信息,可以隨時(shí)通過(guò)檢查矩形的長(zhǎng)寬是否相等來(lái)判斷。
class Rectangle(val height: Int, val width: Int) { val isSquare: Boolean get() { // 聲明自定義的 getter return height == width } } 對(duì)于不需要花括號(hào)的 getter 你也可以這樣寫(xiě):
get() = height == width-
在 KotlinTest 項(xiàng)目中的 DataBinding RootHandler 中有使用到。
class RootHandler(private val listener: OnTitleClickListener): BaseObservable() { /** 標(biāo)記-是否顯示標(biāo)題欄 */ @get:Bindable // getter 使用 @Bindable 注解 var showTitle: Boolean = false // 屬性聲明 set(showTitle) { // setter field = showTitle // 使用 field 指代屬性 notifyPropertyChanged(BR.showTitle) // DataBinding 更新布局 } ... ... }
目錄和包
- Koltin 中的目錄和包與 Java 中類似。
- Kotlin 不區(qū)分導(dǎo)入的是類還是函數(shù),它可以使用 import 關(guān)鍵字導(dǎo)入任意類,也可以導(dǎo)入頂層函數(shù)。
- Kotlin 中一個(gè)文件中可以有多個(gè)類,并且文件的名字可以隨意選擇。
- 大多數(shù)情況下,遵循 Java 的目錄布局并根據(jù)包結(jié)構(gòu)把源碼放在目錄中是個(gè)很好的選擇,但是你也應(yīng)該毫不猶豫地把多個(gè)類放進(jìn)同一個(gè)文件中,特別是那些很小的類(Koltin 中的類通常很小)。
最后
- 如果有什么疑問(wèn)歡迎大家在評(píng)論區(qū)提問(wèn)。
- 筆者會(huì)給大家不斷帶來(lái) Kotlin 相關(guān)知識(shí),歡迎關(guān)注~