Statiske metoder Atferd i Kotlin

1. Oversikt

En måte som Kotlin-språket skiller seg fra Java er at Kotlin ikke inneholder statisk nøkkelord som vi er kjent med.

I denne raske opplæringen vil vi se noen måter å oppnå Java's statiske metodeadferd i Kotlin.

2. Pakke-nivå funksjoner

La oss starte med å lage en LoggingUtils.kt fil. Her vil vi lage en veldig enkel metode kalt feilsøke. Siden vi ikke bryr oss så mye om funksjonaliteten i metoden vår, vil vi bare skrive ut en enkel melding.

Siden vi definerer metoden vår utenfor en klasse, representerer den en funksjon på pakkenivå:

morsom feilsøking (debugMessage: String) {println ("[DEBUG] $ debugMessage")}

Vi vil også se i dekompilert kode som vår feilsøke metoden er nå erklært som statisk:

public final class LoggingUtilsKt {public static final void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Streng var1 = "[DEBUG]" + debugMessage; System.out.println (var1); }}

3. Kompanjong Objekter

Kotlin lar oss lage objekter som er felles for alle forekomster av en klasse - ledsagerobjektene. Vi kan lage en enkelt forekomst av et objekt bare ved å legge til nøkkelordet kompanjong.

La oss definere feilsøkingsmetoden vår inne i kompanjong gjenstand:

klasse ConsoleUtils {ledsagerobjekt {fun debug (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Vår dekompilerte kode viser oss at vi kan få tilgang til feilsøke metoden via Kompanjong gjenstand:

public final class ConsoleUtils {public static final ConsoleUtils.Companion Companion = new 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 å unngå å kalle den resulterende forekomsten med det generiske navnet Kompanjong, vi kan også gi et tilpasset navn.

Til slutt, for å lage feilsøke metode statisk igjen, bør vi bruke @JvmStatic kommentar:

klasse ConsoleUtils {ledsagerobjekt {@JvmStatic fun debug (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Ved å bruke den, vil vi ende opp med en faktisk statisk endelig ugyldig feilsøking metode i vår dekompilerte kode:

public final class ConsoleUtils {public static final ConsoleUtils.Companion Companion = new ConsoleUtils.Companion ((DefaultConstructorMarker) null); @JvmStatic offentlig statisk endelig ugyldig feilsøking (@NotNull String debugMessage) {Companion.debug (debugMessage); } offentlig statisk sluttklasse Companion {@JvmStatic offentlig endelig ugyldig feilsøking (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Streng var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Nå kan vi få tilgang til denne nye metoden direkte via ConsoleUtils klasse.

4. Konklusjon

I denne korte opplæringen så vi hvordan man replikerer oppførselen til Java i Kotlin statisk metoder. Vi har brukt funksjoner på pakkenivå og også ledsagende objekter.

Implementeringen av alle disse kodebitene finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found