Statische methodengedrag in Kotlin

1. Overzicht

Een manier waarop de Kotlin-taal verschilt van Java is dat Kotlin de statisch trefwoord waarmee we bekend zijn.

In deze korte tutorial zullen we een paar manieren zien om Java's statische methodegedrag in Kotlin te bereiken.

2. Functies op pakketniveau

Laten we beginnen met het maken van een LoggingUtils.kt het dossier. Hier maken we een heel eenvoudige methode met de naam debuggen. Omdat de functionaliteit van onze methode ons niet veel kan schelen, zullen we gewoon een eenvoudig bericht afdrukken.

Omdat we onze methode buiten een klasse definiëren, vertegenwoordigt deze een functie op pakketniveau:

leuke foutopsporing (debugMessage: String) {println ("[DEBUG] $ debugMessage")}

We zullen ook in de gedecompileerde code zien dat onze debuggen methode is nu gedeclareerd als statisch:

openbare laatste klasse LoggingUtilsKt {openbare statische laatste ongeldige foutopsporing (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); String var1 = "[DEBUG]" + debugMessage; System.out.println (var1); }}

3. Metgezel Voorwerpen

Met Kotlin kunnen we objecten maken die gemeenschappelijk zijn voor alle instanties van een klasse - de begeleidende objecten. We kunnen een singleton-instantie van een object maken door het trefwoord toe te voegen metgezel.

Laten we onze debug-methode definiëren in een metgezel voorwerp:

class ConsoleUtils {begeleidend object {leuke foutopsporing (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Onze gedecompileerde code laat ons zien dat we toegang hebben tot het debuggen methode via de Metgezel voorwerp:

openbare laatste klasse ConsoleUtils {openbare statische laatste ConsoleUtils.Companion Companion = nieuwe ConsoleUtils.Companion ((DefaultConstructorMarker) null); openbare statische laatste klasse Companion {openbare laatste ongeldige foutopsporing (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); String var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} publieke Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Om te voorkomen dat de resulterende instantie met de generieke naam wordt aangeroepen Metgezel, we kunnen ook een aangepaste naam geven.

Eindelijk, om het debuggen methode statisch nogmaals, we moeten de @JvmStatic annotatie:

class ConsoleUtils {begeleidend object {@JvmStatic leuke foutopsporing (debugMessage: String) {println ("[DEBUG] $ debugMessage")}}}

Door het te gebruiken, krijgen we een actueel statische definitieve ongeldige debug methode in onze gedecompileerde code:

openbare laatste klasse ConsoleUtils {openbare statische laatste ConsoleUtils.Companion Companion = nieuwe ConsoleUtils.Companion ((DefaultConstructorMarker) null); @JvmStatic openbare statische definitieve ongeldige debug (@NotNull String debugMessage) {Companion.debug (debugMessage); } openbare statische laatste klasse Companion {@JvmStatic openbare laatste ongeldige debug (@NotNull String debugMessage) {Intrinsics.checkParameterIsNotNull (debugMessage, "debugMessage"); String var2 = "[DEBUG]" + debugMessage; System.out.println (var2); } private Companion () {} publieke Companion (DefaultConstructorMarker $ constructor_marker) {this (); }}}

Nu hebben we rechtstreeks toegang tot deze nieuwe methode via het ConsoleUtils klasse.

4. Conclusie

In deze korte tutorial hebben we gezien hoe we in Kotlin het gedrag van Java kunnen repliceren statisch methoden. We hebben functies op pakketniveau gebruikt en ook begeleidende objecten.

De implementatie van al deze fragmenten is te vinden op GitHub.


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