Guide de Kotlin @JvmField

Guide de Kotlin @JvmField

1. Vue d'ensemble

Dans ce tutoriel, nous allons explorer l'annotation@JvmField surKotlin.

Kotlin a son approche des classes et des propriétés, qui diffère de celle utilisée en Java. L'annotation@JvmField permet de réaliser la compatibilité entre les deux langages.

2. Déclaration de terrain

Par défaut, les classes Kotlin n'exposent pas de champs, mais plutôt des propriétés.

Le langage fournit automatiquement des champs de sauvegarde aux propriétés qui stockent sa valeur sous la forme d'un champ:

class CompanionSample {
    var quantity = 0
    set(value) {
        if(value >= 0) field = value
    }
}

Ceci est un exemple simple, mais en utilisant le décompilateur de Kotlin dans IntelliJ (Outils> Kotlin> Afficher le décompilateur de Kotlin), il nous montrera à quoi il ressemblerait en Java:

public class JvmSample {
   private int quantity;

   // custom getter

   public final void setQuantity(int value) {
      if (value >= 0) {
         this.quantity = value;
      }
   }
}

Cependant, cela ne signifie pas que nous ne pouvons pas du tout avoir de champs, il existe certains scénarios où cela est nécessaire. Dans ce cas, nous pouvons tirer parti de l'annotation@JvmField, qui demande au compilateur de ne pas générer de getters et de setters pour la propriété et de l'exposer comme un simple champ Java.

Jetons un coup d'œil à l'exemple de Kotlin:

class KotlinJvmSample {
    @JvmField
    val example = "Hello!"
}

Et son équivalent Java décompilé - ce qui prouve bien que le champ a été exposé de la manière standard en Java:

public class KotlinJvmSample {
    @NotNull
    public final String example = "Hello!";
}

3. Variables statiques

Un autre cas où l'annotation est pratique est le cas où une propriété déclarée dans un objet de nom ou un objet compagnon comporte un champ de support statique:

public class Sample {
    public static final int MAX_LIMIT = 20;
}
class Sample {
    companion object {
        @JvmField val MAX_LIMIT = 20
    }
}

4. Exceptions d'utilisation

Jusqu'à présent, nous avons discuté des situations dans lesquelles nous pouvons utiliser l'annotation, mais il existe certaines restrictions.

Voici quelques situations où nous ne pouvons pas utiliser l'annotation:

  • Propriétés privées

  • Propriétés avec les modificateursopen,override,const

  • Propriétés déléguées

5. Conclusion

Dans cet article rapide, nous avons exploré les différentes façons d’utiliser l’annotation@JvmField de Kotlin.

L'implémentation de tous ces exemples et extraits de code peut être trouvée dans leGitHub project - il s'agit d'un projet Maven, il devrait donc être facile à importer et à exécuter tel quel.