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
が使用されることを説明しています。
上記のエラーが発生するのはなぜですか?
あなたがやろうとしているのは、インスタンスを持たないクラスの値にアクセスすることです。次の3つのソリューションがあります。
package example
object Apple {
val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}
この方法では、object
sがKotlinで機能するため、インスタンスを作成する必要はありません。
次のようにクラスをインスタンス化することもできます。
package example
class Store {
fun buy() {
val SIZE = Apple().Apple_SIZE_KEY
}
}
このソリューションでは、Apple
のオブジェクトもありますが、Apple
はクラスとして宣言されています。
3番目のオプションは、Javaの静的変数のように動作するコンパニオンオブジェクトです。
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)
}