我正在学习kotlin中的运算符重载,我遇到了invoke
方法。当我对它进行研究时,我发现它的工作原理与每个类的init
构造函数非常相似。我无法理解它们的区别,它们似乎很相似,因为我们在invoke
方法中所做的一切都可以在init
构造函数中完成。
那么有什么区别,我们应该在什么时候使用它们呢?
这不是一个好的比较。init
块每次实例化类时都会运行,使用任何类型的构造函数,我们将在下面看到。但是invoke
方法可以被多次调用,就像该类的任何其他方法一样。假设您想在代码的不同部分以字符串的形式返回类的所有值。您可以在invoke中实现它,并在必要时调用它,而无需命名函数。
示例:
class Person(val name :String,var age:Int) {
fun incrementAge(){
age =age + 1
}
operator fun invoke():String {
return "name: $name nage: $agen"
}
}
fun main() {
val x = Person("lionel",35)
println(x())
x.incrementAge()
println(x())
}
输出:
name: lionel
age: 35
name: lionel
age: 36