Intereting Posts
Есть ли какая-нибудь библиотека для работы с монадами на котлин? Kotlin getParcelableArray из комплекта намерений не может передать его пользовательскому типу RequiresApi vs TargetApi андроид андроид Применение перечисления состоит из 3 адаптеров между 2 действиями в Котлине Выполнение программы Java и Kotlin с библиотекой времени исполнения Kotlin в пути к классам Котлин: Куда должны идти функции верхнего уровня? Котлиновская видимость вложенных членов Как правильно сериализовать такой JSON с помощью GSON Android? кодировка значений атрибутов в Jsoup Как создать полный экран активности в android программно с помощью kotlin. Невозможно разрешить зависимости для задачи assembleAndroidTest с плагином Android Gradle 3.0.1 kotlin: некоторые проблемы с массивами в аннотациях Тестирование JUnit с помощью студии KOTLIN android Kotlin: Интерфейс … не имеет конструкторов Функция Котлина с нулевым / ненулевым вводом, отображаемым на нулевой / ненулевой вывод

Что такое типализм в Котлине и как он используется в этой реализации?

Я вижу, что используется ключевое слово typealias, а затем вызывается метод invoke для этого типа,

Может ли кто-нибудь объяснить, что это такое и как он используется?

typealias NewKittiesReceived = (Kitty) -> Unit class KittyRepository { private val timer = Timer() private val random = Random() private val period = TimeUnit.SECONDS.toMillis(1) internal fun receiveNewKitties(newKittiesReceived: NewKittiesReceived) { timer.schedule(object : TimerTask() { override fun run() { val nameRandom = random.nextInt(KittyNames.values().size) val ageRandom = random.nextInt(5) newKittiesReceived.invoke(Kitty(KittyNames.values()[nameRandom].name, ageRandom)) } }, period, period) } } 

Часто более читаемо иметь назначенные имена для типов функций, таких как (Kitty) -> Unit . В конце концов, typealias просто дает нам способ определить псевдоним для такого (например) типа функции, который затем может использоваться во всем коде вместо этого явного типа в качестве замены 1: 1.

В вашем примере тип функции (Kitty) -> Unit сглаживается с помощью NewKittiesReceived , что является аргументом функции receiveNewKitties . Каждая переменная, содержащая функцию ( newKittiesReceived в примере), может быть вызвана function.invoke(arguments...) или проще с function(arguments) .

Существует только одна ситуация, когда на typealias деле используются typealias : определение newKittiesReceived: NewKittiesReceived будет переведено на newKittiesReceived: (Kitty) -> Unit .

Документы находятся здесь .

Вот что говорит документация :

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

Таким образом, как вы можете видеть, тиализы улучшают читаемость и сокращают имена, которые должны быть длинными.