Псевдонимы типов
Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, вы можете ввести другое, более короткое имя, и использовать его вместо первоначального.
Псевдонимы типов полезны, когда вы хотите сократить длинные имена типов, содержащих обобщения. К примеру, можно упрощать названия типов коллекций:
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)) // выведет "true"
val p: Predicate<Int> = { it > 0 }
println(listOf(1, -2).filter(p)) // выведет "[1]"
}