package example
class Apple {
val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}
Classe:
package example
class Store {
fun buy() {
val SIZE = Apple.APPLE_SIZE_KEY
}
}
Erreur:
'Apple_SIZE_KEY' a un accès privé dans 'example.Apple'
Mais documentation officielle décrit que si nous ne spécifions aucun modificateur de visibilité, public
est utilisé par défaut.
Pourquoi l'erreur ci-dessus arrive-t-elle?
Ce que vous essayez de faire, c'est d'accéder à une valeur d'une classe qui n'a pas d'instance. Voici trois solutions:
package example
object Apple {
val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}
De cette façon, vous n'avez pas besoin d'instancier quoi que ce soit à cause de la façon dont object
s fonctionne dans Kotlin.
Vous pouvez également instancier votre classe comme ceci:
package example
class Store {
fun buy() {
val SIZE = Apple().Apple_SIZE_KEY
}
}
Dans cette solution, vous avez également un objet de Apple
, mais Apple
est toujours déclaré en tant que classe.
La troisième option est un objet compagnon, qui se comporte comme des variables statiques en Java.
package example
class Apple {
companion object {
val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}
}
Si vous voulez que ce soit une propriété de niveau classe au lieu d'une propriété de niveau instance, vous pouvez utiliser un objet compagnon :
class Apple {
companion object {
val Apple_SIZE_KEY: String = "Apple_SIZE_KEY"
}
}
fun useAppleKey() {
println(Apple.APPLE_SIZE_KEY)
}
Ce que vous avez actuellement est une propriété d'instance, que vous pouvez utiliser comme ceci:
fun useInstanceProperty() {
val Apple = Apple()
println(Apple.APPLE_SIZE_KEY)
}