Найти тему

Typealias, Kotlin. Как заменить длинное название.

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 в Android Studio
Пример typealias в Android Studio

Также можно использовать 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 + гугл и собственный опыт.

-2