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" } }
有了这个解决方案,你的电话将成功