Псевдонимы типов
Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, можно ввести другое, более короткое имя и использовать его вместо исходного.
Это полезно для сокращения длинных обобщенных типов. Например, часто хочется сократить типы коллекций:
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() {
val f: (Int) -> Boolean = { it > 0 }
println(foo(f)) // prints "true"
val p: Predicate<Int> = { it > 0 }
println(listOf(1, -2).filter(p)) // prints "[1]"
}
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/type-aliases.html