6 votes

Accès aux constantes définies en Kotlin dans une classe java

J'ai défini certaines constantes dans Kotlin.

object Keys {
    const val SPLASH_DURATION : Long = 5000

    const val READ_TIMEOUT : Int = 200
    const val CONNECTION_TIMEOUT : Int = 200
    const val WRITE_TIMEOUT : Int = 200

    var BASE_URL = BuildConfig.SERVER_KEY
}
  • Si j'essaie d'accéder à BASE_URL dans une classe Java en tant que Keys.BASE_URL . Je reçois l'erreur, Il a un accès privé.
  • Comment résoudre ce problème. Devrais-je déclarer les constantes différemment en kotlin.

13voto

Goku Points 5092

Vous pouvez utiliser Companion Objects

  • Une déclaration d'objet à l'intérieur d'une classe peut être marquée avec l'attribut companion mot-clé :

Essayez de cette façon

class Keys {

    companion object {
        const val SPLASH_DURATION : Long = 5000
        const val READ_TIMEOUT : Int = 200
        const val CONNECTION_TIMEOUT : Int = 200
        const val WRITE_TIMEOUT : Int = 200

    }
}

Vous pouvez maintenant accéder à votre const variable comme ceci

Keys.CONNECTION_TIMEOUT;

Deuxième voie

object Keys {
    const val SPLASH_DURATION: Long = 5000
    const val READ_TIMEOUT: Int = 200
    const val CONNECTION_TIMEOUT: Int = 200
    const val WRITE_TIMEOUT: Int = 200
}

Vous pouvez maintenant accéder à votre const variable comme ceci

Keys.SPLASH_DURATION;

4voto

TheOska Points 45

Comment résoudre le problème :

Ajouter le @JvmField

Exemple :

object Keys {
    const val SPLASH_DURATION : Long = 5000

    const val READ_TIMEOUT : Int = 200
    const val CONNECTION_TIMEOUT : Int = 200
    const val WRITE_TIMEOUT : Int = 200

    @JvmField
    var BASE_URL = BuildConfig.SERVER_KEY
}

Pourquoi

  1. Utilisez l'annotation @JvmField sur un champ public de l'objet pour indiquer au compilateur de ne pas générer de getter ou setter.
  2. L'exposer comme un champ statique dans la classe

Voir la documentation kotlin

1voto

enter image description here

Vous pouvez simplement créer un fichier de constantes comme la capture d'écran ci-dessus.

Définissez votre valeur constante de cette manière, sans créer d'objets complémentaires, et accédez-y dans tous vos projets.

vos valeurs constantes :-

const val SPLASH_DURATION : Long = 5000
const val READ_TIMEOUT : Int = 200
const val CONNECTION_TIMEOUT : Int = 200
const val WRITE_TIMEOUT : Int = 200

Et si vous voulez faire de l'objet compagnon, vous pouvez aussi le faire en KOTLIN

par exemple

 class Keys {

   companion object {

       const val SPLASH_DURATION : Long = 5000
        const val READ_TIMEOUT : Int = 200
        const val CONNECTION_TIMEOUT : Int = 200
        const val WRITE_TIMEOUT : Int = 200

    }
}

et le récupérer comme ça

Keys.READ_TIMEOUT

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