Chovanie statických metód v Kotline

1. Prehľad

Jedným zo spôsobov, ako sa jazyk Kotlin líši od jazyka Java, je ten, že Kotlin neobsahuje statický kľúčové slovo, ktoré poznáme.

V tomto rýchlom návode uvidíme niekoľko spôsobov, ako dosiahnuť správanie statickej metódy Javy v Kotline.

2. Funkcie na úrovni balíka

Začnime vytvorením a LoggingUtils.kt spis. Tu vytvoríme veľmi jednoduchú metódu s názvom ladiť. Pretože sa veľmi nezaoberáme funkcionalitou našej metódy, vytlačíme si jednoduchú správu.

Pretože našu metódu definujeme mimo triedy, predstavuje funkciu na úrovni balíka:

zábavné ladenie (debugMessage: String) {println ("[DEBUG] $ debugMessage")}

V dekompilovanom kóde tiež uvidíme, že náš ladiť metóda je teraz deklarovaná ako statický:

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

3. Spoločník Predmety

Kotlin nám umožňuje vytvárať objekty, ktoré sú spoločné pre všetky inštancie triedy - sprievodné objekty. Môžeme vytvoriť jednu inštanciu objektu iba pridaním kľúčového slova spoločník.

Poďme definovať našu metódu ladenia vo vnútri a spoločník objekt:

trieda ConsoleUtils {sprievodný objekt {zábavné ladenie (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Náš dekompilovaný kód nám ukazuje, že máme prístup k ladiť metóda prostredníctvom Spoločník objekt:

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"); Reťazec var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Aby sa zabránilo volaniu výslednej inštancie všeobecným názvom Spoločník, môžeme dať aj vlastný názov.

Nakoniec, aby sa ladiť metóda statický opäť by sme mali použiť @JvmStatic anotácia:

trieda ConsoleUtils {sprievodný objekt {@JvmStatic zábavné ladenie (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Pri jeho použití sa dostaneme ku skutočnému statické konečné vyprázdnenie ladenia metóda v našom dekompilovanom kóde:

public final class ConsoleUtils {public static final ConsoleUtils.Companion Companion = new ConsoleUtils.Companion ((DefaultConstructorMarker) null); @JvmStatic verejné statické konečné ladenie void (@NotNull String debugMessage) {Companion.debug (debugMessage); } public static final class Companion {@JvmStatic public final void debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); Reťazec var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} public Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Teraz budeme mať k tejto novej metóde prístup priamo cez internet ConsoleUtils trieda.

4. Záver

V tomto krátkom tutoriáli sme videli, ako replikovať správanie Java v Kotline statický metódy. Použili sme funkcie na úrovni balíka a tiež sprievodné objekty.

Implementáciu všetkých týchto úryvkov nájdete na GitHub.


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