自定义类实现函数类型

时间:2020-06-23 18:52:44

标签: kotlin lambda

在kotlin文档中找到有关函数和lambda的信息

class IntTransformer: (Int) -> Int {
    override operator fun invoke(x: Int): Int = TODO()
}

val intFunction: (Int) -> Int = IntTransformer()

在此page中,它表示您可以实现函数类型以像接口一样进行分类。它是如何工作的?能否给我每个部分的解释,并举例说明如何完成?

据我了解,IntTransformer扩展/实现了将int作为参数和输出类型的匿名函数,但我仍然不知道它是如何工作的...

谢谢

1 个答案:

答案 0 :(得分:1)

您可以想到一种类似于接口的函数类型,该接口具有一个名为invoke且具有参数的函数,并且返回类型与其定义相匹配。

所以

(Int) -> String

非常像

interface Foo {
    operator fun invoke(param: Int): String
}

因此,如果类从(Int) -> String继承,您将采用与继承上面的Foo完全相同的方式来实现。您可以说函数继承更为通用,因为它可以让您的类直接作为函数参数传递,而不必使用::invoke对其调用函数进行引用。