Typealias — интересная фича Kotlin, о которой я недавно узнала. Функция доступна только в версии 1.1+. По сути, это просто псевдоним, которым можно заменить длинное название.
Я его обычно использую для синтетиков. Пример: у нас в xml есть переменная с названием the_best_fragment_second_radio_button_green. Использовать findViewById не хочется, потому что это тяжелая операция, но и писать каждый раз такое длинное название — так себе идея. Выход есть. В самом начале класса (там, где импорты) пишем:
import kotlinx.android.synthetic.main.fragment_package.the_best_fragment_second_radio_button_green as shortName
Всё. Теперь, когда под shortName будет подразумеваться the_best_fragment_second_radio_button_green.
Было: the_best_fragment_second_radio_button_green.text = "Привет"
Стало: shortName.text = "Привет"
Как формируется эта строчка: import kotlinx.android.synthetic.main — пишем всегда. После ставим точку и выбираем активити/фрагмент, где находится вьюшка. Ну и осталось ввести id для нашей вью — написать as — и ввести новое имя.
Можно всё сделать с помощью студии: ставим мышку на синтетик в самом фрагменте — Alt+Enter — Introduce Import alias — синтетик станет красным — ещё раз нажимаем Alt+Enter. Но сверху в импорте нужно будет подправить на название, которое хотим использовать.
Также можно использовать typealias для обычных переменных. Но делать это нужно ДО объявления класса.
Например:
typealias shortName = MutableMap<String, MutableList<String>>
class Cat { }
Теперь внутри, например, onCreate можно будет написать:
val map: shortName = mutableMapOf()
И другие примеры:
typealias MyHandler = (Int, String, Any) -> Unit // функциональные типы
Как используем:
val handler: MyHandler = {number, someString, something -> что-то делаем }
Другой пример:
typealias someMethod<T> = (T) -> Boolean
Как используем:
val p: someMethod<Int> = { it > 0 }
И можно использовать для внутренних классов:
typealias inner = OuterClass.InnerClass
Статья основана по мотивам https://kotlinlang.ru/docs/reference/type-aliases.html + гугл и собственный опыт.