Anleitung zu Kotlin @JvmField
1. Überblick
In diesem Tutorial werden wir die Annotation von@JvmFieldausKotlin untersuchen.
Kotlin hat seinen Ansatz für Klassen und Eigenschaften, der sich von dem in Java verwendeten Ansatz unterscheidet. Die Annotation@JvmFieldermöglicht die Kompatibilität zwischen den beiden Sprachen.
2. Felddeklaration
Standardmäßig machen Kotlin-Klassen keine Felder, sondern Eigenschaften verfügbar.
Die Sprache stellt automatisch Hintergrundfelder für Eigenschaften bereit, in denen der Wert in Form eines Felds gespeichert wird:
class CompanionSample {
var quantity = 0
set(value) {
if(value >= 0) field = value
}
}
Dies ist ein einfaches Beispiel, aber wenn Sie Kotlins Dekompiler in IntelliJ verwenden (Extras> Kotlin> Kotlin-Dekompiler anzeigen), wird gezeigt, wie er in Java aussehen würde:
public class JvmSample {
private int quantity;
// custom getter
public final void setQuantity(int value) {
if (value >= 0) {
this.quantity = value;
}
}
}
Dies bedeutet jedoch nicht, dass wir überhaupt keine Felder haben können. Es gibt bestimmte Szenarien, in denen dies erforderlich ist. In diesem Fall können wir die Annotation@JvmFieldnutzen, die den Compiler anweist, keine Getter und Setter für die Eigenschaft zu generieren und sie als einfaches Java-Feld verfügbar zu machen.
Schauen wir uns das Kotlin-Beispiel an:
class KotlinJvmSample {
@JvmField
val example = "Hello!"
}
Und sein Java-dekompiliertes Gegenstück - was in der Tat beweist, dass das Feld auf die Standard-Java-Art exponiert wurde:
public class KotlinJvmSample {
@NotNull
public final String example = "Hello!";
}
3. Statische Variablen
Eine weitere nützliche Annotation ist, wenn eine in einem Namens- oder Begleitobjekt deklarierte Eigenschaft ein statisches Hintergrundfeld aufweist:
public class Sample {
public static final int MAX_LIMIT = 20;
}
class Sample {
companion object {
@JvmField val MAX_LIMIT = 20
}
}
4. Nutzungsausnahmen
Bisher haben wir Situationen besprochen, in denen wir die Anmerkung verwenden können, aber es gibt einige Einschränkungen.
In folgenden Situationen können wir die Anmerkung nicht verwenden:
-
Private Immobilien
-
Eigenschaften mit den Modifikatorenopen,override,const
-
Delegierte Eigenschaften
5. Fazit
In diesem kurzen Artikel haben wir die verschiedenen Verwendungsmöglichkeiten der Kotlin-Annotation@JvmFielduntersucht.
Die Implementierung all dieser Beispiele und Codefragmente finden Sie inGitHub project - dies ist ein Maven-Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.