類(lèi)型別名為現(xiàn)有類(lèi)型提供替代名稱(chēng)。
如果類(lèi)型名稱(chēng)太長(zhǎng),你可以另外引入較短的名稱(chēng),并使用新的名稱(chēng)替代原類(lèi)型名。
它有助于縮短較長(zhǎng)的泛型類(lèi)型。
例如,通??s減集合類(lèi)型是很有吸引力的:
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>
你可以為函數(shù)類(lèi)型提供另外的別名:
typealias MyHandler = (Int, String, Any) -> Unit
typealias Predicate<T> = (T) -> Boolean
你可以為內(nèi)部類(lèi)和嵌套類(lèi)創(chuàng)建新名稱(chēng):
class A {
inner class Inner
}
class B {
inner class Inner
}
typealias AInner = A.Inner
typealias BInner = B.Inner
類(lèi)型別名不會(huì)引入新類(lèi)型。
它們等效于相應(yīng)的底層類(lèi)型。
當(dāng)你在代碼中添加 typealias Predicate<T> 并使用 Predicate<Int> 時(shí),Kotlin 編譯器總是把它擴(kuò)展為 (Int) -> Boolean。
因此,當(dāng)你需要泛型函數(shù)類(lèi)型時(shí),你可以傳遞該類(lèi)型的變量,反之亦然:
typealias Predicate<T> = (T) -> Boolean
fun foo(p: Predicate<Int>) = p(42)
fun main(args: Array<String>) {
val f: (Int) -> Boolean = { it > 0 }
println(foo(f)) // 輸出 "true"
val p: Predicate<Int> = { it > 0 }
println(listOf(1, -2).filter(p)) // 輸出 "[1]"
}