1
votes

Comment définir un booléen statique public dans Kotlin

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;


0 commentaires

4 Réponses :


1
votes

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


0 commentaires

0
votes

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


1 commentaires

Quand j'utilise une autre classe Cette erreur: 'ActivityIsRuning' a un accès privé dans className



3
votes

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


4 commentaires

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



0
votes

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
}


1 commentaires

Quand j'utilise une autre classe Cette erreur: 'ActivityIsRuning' a un accès privé dans className