Membuat Ekuivalen final statis Java di Kotlin

1. Ikhtisar

Dalam tutorial singkat ini, kita akan membahas variabel final statis di Java dan yang setara di Kotlin.

Di Java, mendeklarasikan variabel final statis membantu kita membuat konstanta . Dan di Kotlin, kami memiliki beberapa cara untuk mencapai tujuan yang sama.

2. Di dalam sebuah benda

Pertama, mari kita lihat mendeklarasikan konstanta dalam objek Kotlin :

object TestKotlinConstantObject { const val COMPILE_TIME_CONST = 10 val RUN_TIME_CONST: Int init { RUN_TIME_CONST = TestKotlinConstantObject.COMPILE_TIME_CONST + 20; } }

Dalam contoh di atas, kami menggunakan const val untuk mendeklarasikan konstanta waktu kompilasi, dan val untuk mendeklarasikan konstanta run-time.

Kami memanggilnya dalam kode Kotlin kami dengan cara yang sama seperti variabel final statis Java :

@Test fun givenConstant_whenCompareWithActualValue_thenReturnTrue() { assertEquals(10, TestKotlinConstantObject.COMPILE_TIME_CONST) assertEquals(30, TestKotlinConstantObject.RUN_TIME_CONST) }

Namun, perhatikan bahwa kami tidak dapat menggunakan TestKotlinConstantObject.RUN_TIME_CONST dalam kode Java . Kata kunci val dengan sendirinya, tanpa kata kunci const , tidak mengekspos bidang Kotlin sebagai publik untuk dipanggil oleh kelas Java .

Itulah alasan mengapa kami memiliki @JvmField untuk mengekspos variabel val untuk membuat variabel final statis yang ramah-Java :

@JvmField val JAVA_STATIC_FINAL_FIELD = 20

Kita bisa memanggil yang ini seperti variabel const val di kelas Kotlin dan Java :

assertEquals(20, TestKotlinConstantObject.JAVA_STATIC_FINAL_FIELD)

Selain itu, kami juga memiliki @JvmStatic, yang dapat kami gunakan dengan cara yang mirip dengan @JvmField. Tapi kami tidak menggunakannya di sini karena @JvmStatic membuat pengakses properti statis di Java tetapi tidak untuk variabel itu sendiri.

3. Di dalam kelas Kotlin

Deklarasi konstanta ini serupa di kelas Kotlin , tetapi di dalam objek pendampingnya:

class TestKotlinConstantClass { companion object { const val COMPANION_OBJECT_NUMBER = 40 } }

Dan kita bisa melakukan hal yang sama seperti sebelumnya:

assertEquals(40, TestKotlinConstantClass.COMPANION_OBJECT_NUMBER)

5. Kesimpulan

Di artikel ini, kita telah membahas penggunaan const , val , dan @JvmField di Kotlin untuk membuat variabel final statis.

Seperti biasa, kode dapat ditemukan di GitHub.