Perilaku Metode Statis di Kotlin

1. Ikhtisar

Salah satu perbedaan bahasa Kotlin dengan Java adalah Kotlin tidak mengandung kata kunci statis yang kita kenal.

Dalam tutorial singkat ini, kita akan melihat beberapa cara untuk mencapai perilaku metode statis Java di Kotlin.

2. Fungsi Tingkat Paket

Mari kita mulai dengan membuat file LoggingUtils.kt . Di sini, kami akan membuat metode yang sangat sederhana yang disebut debug . Karena kami tidak terlalu peduli dengan fungsionalitas di dalam metode kami, kami hanya akan mencetak pesan sederhana.

Karena kita mendefinisikan metode kita di luar kelas, ini mewakili fungsi tingkat paket:

fun debug(debugMessage : String) { println("[DEBUG] $debugMessage") }

Kami juga akan melihat dalam kode yang didekompilasi bahwa metode debug kami sekarang dinyatakan sebagai statis :

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

3. Objek Pendamping

Kotlin memungkinkan kita membuat objek yang sama untuk semua instance kelas - objek pendamping. Kita bisa membuat instance tunggal dari sebuah objek hanya dengan menambahkan kata kunci pengiring .

Mari tentukan metode debug kita di dalam objek pendamping :

class ConsoleUtils { companion object { fun debug(debugMessage : String) { println("[DEBUG] $debugMessage") } } }

Kode dekompilasi kami menunjukkan bahwa kami dapat mengakses metode debug melalui objek Companion :

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

Untuk menghindari pemanggilan instance yang dihasilkan dengan nama generik Companion, kita juga dapat memberikan nama kustom.

Terakhir, untuk membuat metode debug menjadi statis lagi, kita harus menggunakan anotasi @JvmStatic :

class ConsoleUtils { companion object { @JvmStatic fun debug(debugMessage : String) { println("[DEBUG] $debugMessage") } } }

Dengan menggunakannya, kita akan berakhir dengan metode debug void final statis yang sebenarnya dalam kode dekompilasi kita:

public final class ConsoleUtils { public static final ConsoleUtils.Companion Companion = new ConsoleUtils.Companion((DefaultConstructorMarker) null); @JvmStatic public static final void debug(@NotNull String debugMessage) { Companion.debug(debugMessage); } public static final class Companion { @JvmStatic public final void debug(@NotNull String debugMessage) { Intrinsics.checkParameterIsNotNull(debugMessage, "debugMessage"); String var2 = "[DEBUG] " + debugMessage; System.out.println(var2); } private Companion() {} public Companion(DefaultConstructorMarker $constructor_marker) { this(); } } }

Sekarang, kita akan dapat mengakses metode baru ini secara langsung melalui kelas ConsoleUtils .

4. Kesimpulan

Dalam tutorial singkat ini, kami melihat cara mereplikasi perilaku metode statis Java di Kotlin . Kami telah menggunakan fungsi tingkat paket dan juga objek pendamping.

Penerapan semua cuplikan ini dapat ditemukan di GitHub.