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