什么是Kotlin中的typealias以及如何在此实现中使用它?

时间:2018-01-01 23:33:03

标签: kotlin

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

2 个答案:

答案 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提高了可读性并缩短了很长的名称。