Tingkah Laku Kaedah Statik di Kotlin

1. Gambaran keseluruhan

Salah satu cara bahasa Kotlin berbeza dari Java ialah Kotlin tidak mengandungi kata kunci statik yang kita kenal.

Dalam tutorial ringkas ini, kita akan melihat beberapa cara untuk mencapai tingkah laku kaedah statik Java di Kotlin.

2. Fungsi Tahap Pakej

Mari mulakan dengan membuat fail LoggingUtils.kt . Di sini, kami akan membuat kaedah yang sangat mudah yang disebut debug . Oleh kerana kami tidak terlalu mementingkan fungsi dalam kaedah kami, kami hanya akan mencetak satu pesanan ringkas.

Oleh kerana kami menentukan kaedah kami di luar kelas, ini mewakili fungsi peringkat pakej:

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

Kami juga akan melihat dalam kod yang diuraikan bahawa kaedah debug kami sekarang dinyatakan sebagai statik :

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 membolehkan kita membuat objek yang umum untuk semua keadaan kelas - objek pendamping. Kita boleh membuat satu contoh objek hanya dengan menambahkan kata kunci pendamping .

Mari tentukan kaedah debug kami di dalam objek pendamping :

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

Kod yang diuraikan kami menunjukkan bahawa kami dapat mengakses kaedah 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 mengelakkan memanggil contoh yang dihasilkan dengan nama generik Companion, kami juga dapat memberikan nama khusus.

Akhirnya, untuk menjadikan kaedah debug kembali statik , kita harus menggunakan anotasi @JvmStatic :

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

Dengan menggunakannya, kami akan berakhir dengan kaedah debug final void final statik sebenar dalam kod yang disusun semula kami:

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 dapat mengakses kaedah baru ini secara langsung melalui kelas ConsoleUtils .

4. Kesimpulan

Dalam tutorial ringkas ini, kita melihat bagaimana meniru di Kotlin tingkah laku kaedah statik Java . Kami telah menggunakan fungsi peringkat pakej dan juga objek pendamping.

Pelaksanaan semua coretan ini boleh didapati di GitHub.