什么是Kotlin中的typealias,它在这个实现中是如何被使用的?

我看到有一个正在使用的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) } } 

为函数types指定专用名称通常更具可读性,如(Kitty) -> Unit 。 最后,一个typealias简单地给了我们一个方法来定义一个这样的(例如)函数types的别名,然后可以在整个代码中使用, 而不是显式types作为1:1替换。

在你的例子中,函数types(Kitty) -> Unit被别名NewKittiesReceived别名,它是显示函数receiveNewKitties一个参数。 每个包含函数的variables( newKittiesReceived中的newKittiesReceived )都可以用function.invoke(arguments...)来调用, 或者function(arguments)来调用。

实际上只有一种情况使用了newKittiesReceived: NewKittiesReceived的定义将被转换为newKittiesReceived: (Kitty) -> Unit

文档在这里find。

这是文档所说的:

types别名为现有types提供替代名称。 如果types名称太长,则可以引入一个不同的较短的名称,然后使用新名称。

所以,正如你所看到的,types化提高了可读性,并缩短了很长的名字。