Leitfaden für Kotlin @JvmField

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.