90 votes

Bloc d'initialisation statique en Kotlin

Quel est l'équivalent d'un bloc d'initialisation static en Kotlin?

Je comprends que Kotlin est conçu pour ne pas avoir de choses statiques. Je recherche quelque chose avec des sémantiques équivalentes - le code est exécuté une fois lorsque la classe est chargée pour la première fois.

Mon cas d'utilisation spécifique est que je veux activer la fonction de changement de thème (DayNight) de la bibliothèque Android AppCompat et les instructions disent de mettre du code dans le bloc d'initialisation static de la classe Application.

0 votes

Vérifiez init-blocks kotlin vs Java J'ai expliqué ce qu'est le bloc init et comment il est invoqué en plus de comment il est différent du bloc init de Java, des blocs init statiques, etc.

131voto

hotkey Points 119

D'un certain point de vue, objet compagnons en Kotlin sont équivalents aux parties statiques des classes Java. En particulier, ils sont initialisés avant la première utilisation de la classe, ce qui vous permet d'utiliser leurs blocs init comme un remplacement des initialisateurs statiques Java :

class C {
    companion object {
        init {
            //ici va le code de l'initialiseur statique
        }
    }
}

@voddan ce n'est pas exagéré, en fait c'est ce qui est suggéré sur le site de Kotlin : "Un objet compagnon est initialisé lorsque la classe correspondante est chargée (résolue), ce qui correspond à la sémantique d'un initialiseur statique Java." Différence sémantique entre les expressions et les déclarations d'objet

1 votes

L'objet compagnon est une surcharge ici

4 votes

@voddan, OP a demandé comment exécuter du code avant la première utilisation d'une classe existante. La solution avec la déclaration object nécessite en fait de l'utiliser quelque part en raison de l'initialisation paresseuse.

2 votes

@voddan Voudriez-vous expliquer pourquoi c'est excessif et quelles sont les alternatives ?

3voto

abhilasha Yadav Points 113
objet compagnon  { 
    // Exemple pour une variable statique
    var CODE_DE_REQUETE: Int? = 500

    // Exemple pour une méthode statique
    fun appelPourVerifier(valeur: String): String {
        // votre code
    }
}

Une déclaration d'objet à l'intérieur d'une classe peut être marquée avec le mot-clé companion. Et en dessous, nous pouvons utiliser comme une méthode et une variable statique en Java. Comme nomDeLaClasse.nomDeLaMéthode ou nomDeLaClasse.nomDeVariable

0 votes

AJOUTER UNE EXPLICATION À VOTRE CODE

0 votes

@DerickDaniel s'il vous plaît vérifier maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X