Я вижу, что используется ключевое слово 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)
}
}
2 ответа
Часто удобнее иметь специальные имена для типов функций, такие как (Kitty) -> Unit
. В конце концов, typealias просто дает нам способ определить псевдоним для такого (например) типа функции, который затем можно использовать во всем коде вместо этого явного типа в качестве замены 1: 1.
В вашем примере тип функции (Kitty) -> Unit
имеет псевдоним NewKittiesReceived
, который является аргументом показанной функции receiveNewKitties
. Каждую переменную, содержащую функцию (newKittiesReceived
в примере), можно вызвать с помощью function.invoke(arguments...)
или проще с помощью function(arguments)
.
Есть только одна ситуация, в которой фактически используется typealias
: определение newKittiesReceived: NewKittiesReceived
будет переведено на newKittiesReceived: (Kitty) -> Unit
.
Документы находятся здесь.
Вот что говорится в документации:
Псевдонимы типа предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, вы можете ввести другое более короткое имя и использовать вместо него новое.
Итак, как видите, типализации улучшают читаемость и сокращают имена до слишком длинных.
Похожие вопросы
Новые вопросы
kotlin
Kotlin - это статически типизированный язык программирования с открытым исходным кодом, поддерживаемый и разработанный JetBrains. Kotlin сочетает в себе ООП и функциональные возможности и ориентирован на совместимость, безопасность, ясность и поддержку инструментов. В настоящее время он нацелен на JVM и JavaScript, и это официально поддерживаемый язык на Android.