Spec-Zone.ru › Kotlin 1.4

Псевдонимы типов

Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, можно ввести другое, более короткое имя и использовать его вместо исходного.

Это полезно для сокращения длинных обобщенных типов. Например, часто хочется сократить типы коллекций:

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API