我了解了调用操作符,
a()
is equivalent to a.invoke()
关于Invoke操作符还有什么需要解释的吗.此外,我没有得到任何调用操作符重载的例子.
调用操作符重载是可能的吗?如果可能的话,请任何人用一个例子来解释一下调用操作符重载.我没有收到任何关于这方面的信息.
提前谢谢.
我了解了调用操作符,
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