invoke和init-kotlin之间的区别



我正在学习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

最新更新