Kotlin類型別名

類型別名爲現有類型提供替代名稱。
如果類型名稱太長,你可以另外引入較短的名稱,並使用新的名稱替代原類型名。

它有助於縮短較長的泛型類型。
例如,通常縮減集合類型是很有吸引力的:

typealias NodeSet = Set<Network.Node>

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

你可以爲函數類型提供另外的別名:

typealias MyHandler = (Int, String, Any) -> Unit

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

你可以爲內部類和嵌套類創建新名稱:

class A {
    inner class Inner
}
class B {
    inner class Inner
}

typealias AInner = A.Inner
typealias BInner = B.Inner

類型別名不會引入新類型。
它們等效於相應的底層類型。
當你在代碼中添加 typealias Predicate<T> 並使用 Predicate<Int> 時,Kotlin 編譯器總是把它擴展爲 (Int) -> Boolean
因此,當你需要泛型函數類型時,你可以傳遞該類型的變量,反之亦然:

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]"
}