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