Псевдонимы типов
Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, вы можете ввести другое более короткое имя и вместо него использовать новое.
Это является полезным для сокращения длинные дженерик типов. Например, часто возникает соблазн уменьшить типы коллекций:
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]"
}
Комментарии
Отправить комментарий