Ponašanje statičkih metoda u Kotlinu

1. Pregled

Jedan od načina na koji se jezik Kotlin razlikuje od Jave jest taj da Kotlin ne sadrži statički ključna riječ s kojom smo upoznati.

U ovom brzom uputstvu vidjet ćemo nekoliko načina za postizanje Java-ina ponašanja statičkih metoda u Kotlinu.

2. Funkcije na razini paketa

Počnimo s izradom a LoggingUtils.kt datoteka. Ovdje ćemo stvoriti vrlo jednostavnu metodu pod nazivom otklanjanje pogrešaka. Budući da nam nije puno stalo do funkcionalnosti unutar naše metode, ispisat ćemo samo jednostavnu poruku.

Budući da svoju metodu definiramo izvan klase, ona predstavlja funkciju na razini paketa:

zabavno otklanjanje pogrešaka (debugMessage: String) {println ("[DEBUG] $ debugMessage")}

Također ćemo vidjeti u dekompiliranom kodu da je naš otklanjanje pogrešaka metoda je sada deklarirana kao statički:

javna završna klasa LoggingUtilsKt {javna statička konačna void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Niz var1 = "[DEBUG]" + debugMessage; System.out.println (var1); }}

3. Pratilac Predmeti

Kotlin nam omogućuje stvaranje objekata koji su zajednički svim instancama klase - pratećih objekata. Jednostruku instancu objekta možemo stvoriti dodavanjem ključne riječi suputnik.

Definirajmo našu metodu otklanjanja pogrešaka unutar a suputnik objekt:

klasa ConsoleUtils {prateći objekt {zabavno otklanjanje pogrešaka (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Naš dekompilirani kôd pokazuje nam da možemo pristupiti otklanjanje pogrešaka metodom putem Pratilac objekt:

javna završna klasa ConsoleUtils {javna statička konačna ConsoleUtils.Companion Companion = nova ConsoleUtils.Companion ((DefaultConstructorMarker) null); javna statička završna klasa Companion {javni konačni void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Niz var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Da biste izbjegli pozivanje rezultirajuće instance generičkim imenom Pratitelj, možemo dati i prilagođeno ime.

Napokon, da napravimo otklanjanje pogrešaka metoda statički opet, trebali bismo koristiti @JvmStatic napomena:

klasa ConsoleUtils {prateći objekt {@JvmStatic zabavni otklanjanje pogrešaka (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Koristeći ga, na kraju ćemo dobiti stvarni statički završni void debug metoda u našem dekompiliranom kodu:

javna završna klasa ConsoleUtils {javna statička konačna ConsoleUtils.Companion Companion = nova ConsoleUtils.Companion ((DefaultConstructorMarker) null); @JvmStatic javni statički konačni void debug (@NotNull String debugMessage) {Companion.debug (debugMessage); } javna statička završna klasa Companion {@JvmStatic javna konačna void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Niz var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Sada ćemo moći pristupiti ovoj novoj metodi izravno putem ConsoleUtils razred.

4. Zaključak

U ovom kratkom vodiču vidjeli smo kako u Kotlinu replicirati ponašanje Jave statički metode. Koristili smo funkcije na razini paketa i prateće objekte.

Provedbu svih ovih isječaka možete pronaći na GitHubu.