Je voulais savoir comment je définis une variable statique dans Kotlin qui peut être utilisée dans d'autres classes qui ne sont pas définitives. Parce que les données changent.
Exemple Java:
public static Boolean ActivityIsRuning = false;
4 Réponses :
Vous devez créer un objet compagnon pour cela. Votre code dans Kotlin ressemblerait à ceci:
class Foo { companion object { lateinit var instance: Foo } init { instance = this } }
Vous pouvez définir des variables statiques dans l ' objet compagnon
de n'importe quelle classe. Si vous en faites un var
au lieu d'un val
, il peut changer les valeurs:
class MyClass { companion object { var activityIsRunning: Boolean = false } }
Quand j'utilise une autre classe Cette erreur: 'ActivityIsRuning' a un accès privé dans className
Il existe trois façons d'y parvenir:
1) Déclaration de premier niveau / globale
Déclarez une variable en dehors de toute classe ou fonction et elle sera accessible de n'importe où:
Config.activityIsRunning
2) object (un singleton prêt à l'emploi)
class Config { companion object { var activityIsRunning = false } }
Accessible comme ceci:
StaticData.activityIsRunning
3) Classe avec compagnon objet (comme Todd l'a déjà suggéré)
object StaticData { var activityIsRunning = false }
Accessible comme ceci:
var activityIsRunning = false
Lorsque j'utilise une autre classe Cette erreur: 1-> Impossible de résoudre le symbole ActivityIsRuning, 2 et 3 -> ActivityIsRuning 'a un accès privé dans ClassName
J'ai trouvé .. Dans le troisième cas, De cette façon, le problème a été résolu. "@JvmField var ActivityIsRuning = false" Est-ce standard?
l'ajout de @JvmStatic n'est pas nécessaire. Veuillez noter la différence entre "ActivityIsRuning" et "activityIsRuning". utilisez ce dernier. intellij devrait alors vous demander une importation (la classe doit être soulignée et rouge) (l'objet compagnon et l'objet nécessitent une importation du formulaire packageA.packageB.Config /packageA.packageB.StaticData).
@dariushkiany notez que c'est strictement pour kotlin. vous semblez mélanger avec java (peut-être?)
En ajoutant à @Todd et @Willi Mentzel, si vous souhaitez regrouper ces paramètres dans une zone commune, vous pouvez utiliser un objet
simple de premier niveau.
if( GlobalSettings.isDrinkingCocoCola ){ // do something } else { GlobalSettings.isDrinkingCocoCola = false }
et cela peut être consulté n'importe où dans le code (dans une activité, un service ou n'importe où) comme ceci:
object GlobalSettings{ var isHomeActivityRunning = false var isDrinkingCocoCola = true }
Quand j'utilise une autre classe Cette erreur: 'ActivityIsRuning' a un accès privé dans className