| type | doc |
|---|---|
| layout | reference |
| category | Other |
| title | Псевдонимы типов |
| url | https://kotlinlang.ru/docs/reference/type-aliases.html |
Примечание: Псевдонимы типов доступны в Kotlin начиная с версии 1.1
Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, вы можете ввести другое, более короткое имя, и использовать его вместо первоначального.
Псевдонимы типов полезны, когда вы хотите сократить длинные имена типов, содержащих обобщения. К примеру, можно упрощать названия типов коллекций:
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]"
}