Kotlin:如何从另一个 class 访问字段?
Kotlin: How to access field from another class?
package example
class Apple {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
Class:
package example
class Store {
fun buy() {
val SIZE = Apple.APPLE_SIZE_KEY
}
}
错误:
'APPLE_SIZE_KEY' has private access in 'example.Apple'
但是official documentation说明如果我们不指定任何可见性修饰符,默认使用public
。
为什么会出现上面的错误?
如果您希望这是 class 级别 属性 而不是实例级别 属性,您可以使用 companion object:
class Apple {
companion object {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
}
fun useAppleKey() {
println(Apple.APPLE_SIZE_KEY)
}
您当前拥有的是一个实例 属性,您可以像这样使用它:
fun useInstanceProperty() {
val apple = Apple()
println(apple.APPLE_SIZE_KEY)
}
您要做的是访问没有实例的 class 的值。以下是三种解决方案:
package example
object Apple {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
由于 object
在 Kotlin 中的工作方式,您不需要实例化任何东西。
您也可以像这样实例化您的 class:
package example
class Store {
fun buy() {
val SIZE = Apple().APPLE_SIZE_KEY
}
}
在此解决方案中,您还有一个对象 Apple
,但 Apple
仍被声明为 class。
第三个选项是伴生对象,其行为类似于Java中的静态变量。
package example
class Apple {
companion object {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
}
package example
class Apple {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
Class:
package example
class Store {
fun buy() {
val SIZE = Apple.APPLE_SIZE_KEY
}
}
错误:
'APPLE_SIZE_KEY' has private access in 'example.Apple'
但是official documentation说明如果我们不指定任何可见性修饰符,默认使用public
。
为什么会出现上面的错误?
如果您希望这是 class 级别 属性 而不是实例级别 属性,您可以使用 companion object:
class Apple {
companion object {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
}
fun useAppleKey() {
println(Apple.APPLE_SIZE_KEY)
}
您当前拥有的是一个实例 属性,您可以像这样使用它:
fun useInstanceProperty() {
val apple = Apple()
println(apple.APPLE_SIZE_KEY)
}
您要做的是访问没有实例的 class 的值。以下是三种解决方案:
package example
object Apple {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
由于 object
在 Kotlin 中的工作方式,您不需要实例化任何东西。
您也可以像这样实例化您的 class:
package example
class Store {
fun buy() {
val SIZE = Apple().APPLE_SIZE_KEY
}
}
在此解决方案中,您还有一个对象 Apple
,但 Apple
仍被声明为 class。
第三个选项是伴生对象,其行为类似于Java中的静态变量。
package example
class Apple {
companion object {
val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY"
}
}