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.