Statiske metoders adfærd i Kotlin
1. Oversigt
En måde, hvorpå Kotlin-sproget adskiller sig fra Java, er at Kotlin ikke indeholder statisk nøgleord, som vi kender.
I denne hurtige vejledning ser vi et par måder at opnå Java's statiske metodeadfærd i Kotlin på.
2. Pakke-niveau funktioner
Lad os starte med at oprette en LoggingUtils.kt fil. Her opretter vi en meget enkel metode kaldet fejlfinde. Da vi ikke er meget interesserede i funktionaliteten i vores metode, udskriver vi bare en simpel besked.
Da vi definerer vores metode uden for en klasse, repræsenterer den en pakke-niveau funktion:
sjov fejlretning (debugMessage: String) {println ("[DEBUG] $ debugMessage")}
Vi ser også i den dekompilerede kode, at vores fejlfinde metode er nu erklæret som statisk:
offentlig endelig klasse LoggingUtilsKt {offentlig statisk endelig ugyldig fejlretning (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Streng var1 = "[DEBUG]" + debugMessage; System.out.println (var1); }}
3. Ledsager Objekter
Kotlin giver os mulighed for at skabe objekter, der er fælles for alle forekomster af en klasse - de ledsagende objekter. Vi kan oprette en enkelt instans af et objekt bare ved at tilføje nøgleordet ledsager.
Lad os definere vores fejlretningsmetode inde i en ledsager objekt:
klasse ConsoleUtils {ledsagerobjekt {fun debug (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}
Vores dekompilerede kode viser os, at vi kan få adgang til fejlfinde metode via Ledsager objekt:
offentlig endelig klasse ConsoleUtils {offentlig statisk endelig ConsoleUtils.Companion Companion = ny ConsoleUtils.Companion ((DefaultConstructorMarker) null); public static final class Companion {public final void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Streng var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}
For at undgå at kalde den resulterende forekomst med det generiske navn Ledsager, Vi kan også give et brugerdefineret navn.
Endelig at gøre fejlfinde metode statisk igen skal vi bruge @JvmStatic kommentar:
klasse ConsoleUtils {ledsagende objekt {@JvmStatic sjov debug (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}
Ved at bruge det ender vi med en faktisk statisk endelig ugyldig fejlretning metode i vores dekompilerede kode:
offentlig endelig klasse ConsoleUtils {offentlig statisk endelig ConsoleUtils.Companion Companion = ny ConsoleUtils.Companion ((DefaultConstructorMarker) null); @JvmStatic offentlig statisk endelig ugyldig fejlretning (@NotNull String debugMessage) {Companion.debug (debugMessage); } offentlig statisk endelig klasse Companion {@JvmStatic offentlig endelig ugyldig debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Streng var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}
Nu kan vi få adgang til denne nye metode direkte via ConsoleUtils klasse.
4. Konklusion
I denne korte vejledning så vi, hvordan man replikerer Java's opførsel i Kotlin statisk metoder. Vi har brugt funktioner på pakkeniveau og også ledsagende objekter.
Implementeringen af alle disse uddrag kan findes på GitHub.