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"
    }
}