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.