Kotlin:如何从另一个课程访问领域?

package example class Apple { val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY" } 

类:

 package example class Store { fun buy() { val SIZE = Apple.APPLE_SIZE_KEY } } 

错误:

‘APPLE_SIZE_KEY’在’example.Apple’中有私人访问权限

但官方文档描述,如果我们不指定任何可见性修饰符,默认情况下使用public

我的第二个问题是:

为什么会出现上述错误?

你正在试图做的是访问一个没有实例的类的值。 这里有三个解决方案:

 package example object Apple { val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY" } 

这样你就不需要实例化任何东西,因为object在Kotlin中的工作方式。

你也可以像这样实例化你的类:

 package example class Store { fun buy() { val SIZE = Apple().APPLE_SIZE_KEY } } 

在这个解决方案中,你也有一个Apple的对象,但Apple仍然被宣布为一个类。

第三个选项是伴随对象,其行为与Java中的静态variables相似。

 package example class Apple { companion object { val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY" } } 

如果您希望这是一个类级别的属性,而不是一个实例级别的属性,您可以使用一个伴侣对象 :

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

它是一个实例variables,不能静态访问。 必须在Apple一个实例上调用它:

 Apple().APPLE_SIZE_KEY 

这将工作。 但是,您可能希望按照此答案中的建议使其成为companion对象的一部分:

 class Apple { companion object { val APPLE_SIZE_KEY: String = "APPLE_SIZE_KEY" } } 

有了这个解决方案,你的电话将成功