gpt4 book ai didi

kotlin - 对 Kotlin 的伴生对象定义感到困惑

转载 作者:行者123 更新时间:2023-12-02 12:04:58 25 4
gpt4 key购买 nike

当我到达电子书“Kotlin in action”中的伴随对象部分时,它说:

"如果你需要写一个可以调用的函数
没有类实例但需要访问类的内部结构,您可以将其编写为该类中对象声明的成员”

据我了解,这意味着伴随对象的函数可以访问包含它的类的方法和属性。但是当我尝试实现这一点时,我无法从其伴随对象的函数访问类的成员:

class Normal() {

var name: String = "hallo"


companion object {
fun printName() {
println(name) // ERROR!!! unresolved reference name
}
}}

我误解了这个概念吗?

最佳答案

里面的方法companion默认情况下是静态的(与 Java 相比,这也是您在 Kotlin 中实现静态类型的方式),并且您无法从静态方法访问普通变量。
这里正在发生同样的事情。
编辑:-
书中的定义令人困惑,伴生对象不是类实例的一部分。您不能从伴随对象访问成员,就像在 Java 中您不能从静态方法访问成员一样。但是对于您只需要执行某些操作的实用程序类,您可以调用静态方法,该方法创建类的新实例并执行一些功能。
例如,您可以通过 @user8320224 查看答案,我也在这里引用他的代码,

class Normal {
private var name: String = "hallo"
private fun printName() {
println(name)
}

companion object {
fun factoryNormal(): Normal {
val normal = Normal()
normal.printName()
normal.name = "new name"
normal.printName()
return normal
}
}
}

关于kotlin - 对 Kotlin 的伴生对象定义感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50366553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com