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.