我看到有一个使用了typealias关键字,然后在“type”上调用了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)
}
}
答案 0 :(得分:2)
为函数类型设置专用名称通常更具可读性,例如(Kitty) -> Unit
。最后,一个typealias简单地为我们提供了一种为这样的(例如)函数类型定义别名的方法,然后可以在整个代码中使用代替作为1:1替换。
在您的示例中,函数类型(Kitty) -> Unit
使用NewKittiesReceived
别名,这是显示的函数receiveNewKitties
的参数。保存函数的每个变量(示例中为newKittiesReceived
)都可以使用function.invoke(arguments...)
或更简单地调用[{1}}。
实际使用function(arguments)
只有一种情况:typealias
的定义将被翻译为newKittiesReceived: NewKittiesReceived
。
找到了文档here。
答案 1 :(得分:1)
这是documentation所说的:
类型别名为现有类型提供替代名称。如果是这种类型 名称太长,您可以引入不同的短名称和使用 而不是新的。
因此,正如您所看到的,typealises提高了可读性并缩短了很长的名称。