我了解了调用操作符,

a() is equivalent to a.invoke()

关于Invoke操作符还有什么需要解释的吗.此外,我没有得到任何调用操作符重载的例子.

调用操作符重载是可能的吗?如果可能的话,请任何人用一个例子来解释一下调用操作符重载.我没有收到任何关于这方面的信息.

提前谢谢.

推荐答案

Yes, you can overload invoke. Here's an example:

class Greeter(val greeting: String) {
    operator fun invoke(target: String) = println("$greeting $target!")
}

val hello = Greeter("Hello")
hello("world")  // Prints "Hello world!"

除了@holi java所说的,重写invoke对于任何有明确操作的类都是有用的,可以 Select 使用参数.它还可以作为使用这种方法的Java库类的扩展函数.

例如,假设您有以下Java类

public class ThingParser {
    public Thing parse(File file) {
        // Parse the file
    }
}

然后,您可以在Kotlin的ThingParser上定义一个扩展,如下所示:

operator fun ThingParser.invoke(file: File) = parse(file)

像这样使用它

val parser = ThingParser()
val file = File("path/to/file")
val thing = parser(file)  // Calls ThingParser.invoke extension function

Kotlin相关问答推荐

在Kotlin中将ClosedRange字符串转换为List?<>

如何让Gradle8+在编译Kotlin代码之前编译Groovy代码?然后把它们混合在一个项目中?

Kotlin接口方法默认值&;可传递依赖项

Kotlin中是否可以混合使用推断和显式的通用类型参数?

有没有什么方法或算法可以在没有存储的情况下生成唯一的随机数?

如果带注释的成员未被特定块包围,则发出 IDE 警告

Kotlin 中的as Long和.toLong()有什么区别?

在 Kotlin 中,我可以在集合上有一个条件构建器元素吗?

为什么 android studio 不为所有安全参数生成代码?

如何在主线程上使用 Kotlin 协程 await()

Kotlin默认使用哪种排序?

如何使用kotlin中的反射查找包中的所有类

main函数和常规函数有什么区别?

如何在kotlin语言中将字符转换为ascii值

如何在特定条件下清除jetpack数据存储数据

Kotlin 与 C# 中的标志枚举变量具有相似效果的方式是什么

查找是否在列表中找到具有特定属性值的元素

如何在 Kotlin 中将串联转换为模板

Kotlin for assertThat(foo, instanceOf(Bar.class))

Dagger 2 androidx fragment不兼容类型