作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我到达电子书“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/
我是一名优秀的程序员,十分优秀!