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.