瘋狂kotlin講義連載之Kotlin的基礎類型--類型別名

Kotlin提供了相似於C語言中typedef的功能:能夠爲已有的類型指定另外一個可讀性更強的名字。Kotlin提供了typealias來定義類型別名。typealias語句的語法格式爲:html

typealias 類型別名 = 已有類型java

若是類型名太長,咱們可使用較短的新名稱替代原類型名。它有助於縮短較長的泛型類型。 例如,一般縮減集合類型是頗有吸引力的。編程

// 爲Set<Network.Node>指定更短的別名NodeSetapp

typealias NodeSet = Set<Network.Node>dom

// 爲MutableMap<K, MutableList<File>>指定更短的別名:FileTable<K>ide

typealias FileTable<K> = MutableMap<K, MutableList<File>>函數

接下來便可直接使用NodeSet、FileTable<K>命名變量。post

var set: NodeSetcode

var table: FileTable<String>orm

不少時候,咱們也可能夠經過別名爲內部類起一個更短的別名。例如以下程序。

程序清單:codes\02\2.10\AliasTest.kt

class A {

inner class Inner

}

class B {

inner class Inner

}

// 爲A.Inner內部類指定別名

typealias AInner = A.Inner

// 爲A.Inner內部類指定別名

typealias BInner = B.Inner

fun main(args: Array<String>) {

// 使用AInner定義變量、調用對象

var a: AInner = A().AInner()

// 使用BInner定義變量、調用對象

var b = B().BInner()

}

上面粗體字代碼爲A.Inner、B.Inner兩個內部類分別指定了別名:AInner、BInner,接下來程序中便可使用AInner、BInner別名類定義變量、建立對象。

此外,Kotlin本身也大量利用了別名這個功能,Kotlin利用別名創建Kotlin類和Java類之間的關係。以下代碼是Kotlin集合體系中定義的別名。

typealias kotlin.ArrayList<E> = java.util.ArrayList<E>

typealias kotlin.HashMap<K, V> = java.util.HashMap<K, V>

typealias kotlin.HashSet<E> = java.util.HashSet<E>

typealias kotlin.LinkedHashMap<K, V> = java.util.LinkedHashMap<K, V>

typealias kotlin.LinkedHashSet<E> = java.util.LinkedHashSet<E>

typealias kotlin.RandomAccess = java.util.RandomAccess

與Java相比,Kotlin的Lambda表達式是一個差異較大的特點功能:Java的Lambda表達式的類型是函數式接口,而Kotlin的Lambda表達式的類型直接就是函數類型,所以Kotlin也容許Lambda表達式的類型指定別名。例如以下代碼。

程序清單:codes\02\2.10\AliasTest.kt

// 爲(T) -> Boolean類型指定別名Predicate<T>

typealias Predicate<T> = (T) -> Boolean

// 使用Predicate<String>定義變量,該變量的值是一個Lambda表達式

val p: Predicate<String> = { it.length > 4 }

// 爲filter()方法傳入p參數,只保留長度大於4的字符串

println(arrayOf("Java", "Objective-C", "Go", "Kotlin").filter(p))


以上內容節選自《瘋狂Kotlin講義》:一本讓您最直接認識Kotlin的瘋狂講義
本書即將於2017年11月發售 敬請期待
往期連載

第二期:juejin.im/post/59c1d6…

第三期:juejin.im/post/59e407…

第四期:juejin.im/post/59ed77…

第五期:juejin.im/post/59eec3…

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

第十三期:juejin.im/post/59fc1e…

相關書籍《瘋狂Android講義》https://item.jd.com/11689014.html
相關文章
相關標籤/搜索