当我到达电子书“Kotlin in action”中的伴随对象部分时,它说:
“如果您需要编写一个无需类实例即可调用的函数,但需要访问类的内部结构,则可以将其编写为该类内部对象声明的成员”
据我了解,这意味着伴随对象的函数可以访问包含它的类的方法和属性。但是当我尝试实现这一点时,我无法从其伴随对象的函数访问类的成员:
class Normal() {
var name: String = "hallo"
companion object {
fun printName() {
println(name) // ERROR!!! unresolved reference name
}
}}
Run Code Online (Sandbox Code Playgroud)
我误解了这个概念吗?
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
}
}
}
Run Code Online (Sandbox Code Playgroud)