Pembina Kotlin

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat secara terperinci konstruktor di Kotlin.

Mari kita mulakan dengan ringkasan konsep: kita menggunakan pembina untuk membuat objek. Ini kelihatan seperti deklarasi kaedah, tetapi selalu mempunyai nama yang sama dengan kelas dan mereka tidak mengembalikan apa-apa.

Untuk penyiapan projek Kotlin, lihat tutorial pengenalan kami.

Di Kotlin, kelas boleh mempunyai konstruktor utama dan satu atau lebih pembina sekunder tambahan.

Pada bahagian seterusnya, kita akan membahas setiap jenis dan konsep yang berkaitan.

2. Pembina Utama

Cara pertama untuk membuat objek di Kotlin adalah dengan menggunakan konstruktor utama.

Ini adalah bahagian pengepala kelas. Parameter mungkin juga bidang kelas, yang kita letakkan setelah pengisytiharan kelas.

Mari lihat deklarasi kelas asas, dengan dua sifat dan pembina utama:

class Person constructor(val name: String, val age: Int? = null)

Dalam contoh ini, kami telah menyatakan sifat melalui kata kunci val . Ini berkelakuan sama seperti pemboleh ubah biasa, dengan menyebutkan bahawa sifat val hanya boleh dibaca ( rakan kata kunci akhir Java ).

Sekiranya kita mahu menukar rujukan kemudian, kita harus menggunakan kata kunci var sebagai gantinya. Walau bagaimanapun, kami tidak dapat menghilangkan jenis medan dalam konstruktor utama, kerana ini mesti jelas.

Dalam beberapa kes, kita boleh menghilangkan kata kunci pembina . Ini hanya wajib dalam dua kes: apabila kita menggunakan anotasi, seperti @Autowired atau pengubah akses, seperti peribadi atau dilindungi .

Kita juga boleh menggunakan parameter lalai Kotlin dalam pembina.

Seterusnya, mari kita lihat bagaimana kita boleh menggunakan pembina utama kita:

val person = Person("John") val personWithAge = Person("Mark", 22)

Kita dapat melihat bahawa nama kelas adalah pemanggil pembina. Tidak perlu menggunakan kata kunci baru .

Sebagai rujukan, mari kita lihat setara Java dari deklarasi konstruktor:

class PersonJava { final String name; final Integer age; public PersonJava(String name) { this.name = name; this.age = null; } public PersonJava(String name, Integer age) { this.name = name; this.age = age; } }

Seperti yang anda lihat, Java memerlukan lebih banyak kod untuk mencapai hasil yang sama.

2.1. Pembina Utama di JVM

Harap maklum bahawa penyusun akan menghasilkan konstruktor tambahan tanpa parameter pada JVM. Untuk tujuan ini, ia akan membuat objek dengan nilai lalai.

Dengan cara ini, Kotlin dapat berfungsi dengan baik dengan perpustakaan seperti Jackson atau JPA, yang menggunakan konstruktor no-args untuk membuat contoh kelas:

class Person(val name: String = "")

3. Memulakan Sifat dari Parameter Pembina

Pemula harta tanah dari badan kelas boleh menggunakan parameter pembina utama.

Mari ubah nama menjadi harta atasCaseName :

class Person(val name: String, val age: Int? = null) { val upperCaseName: String = name.toUpperCase() }

Kita dapat melihat output di konsol dengan menambahkan blok init kedua :

init { println("Upper case name is $upperCaseName") }

4. Blok Permulaan

Kami tidak dapat memasukkan kod dalam konstruktor utama.

Walau bagaimanapun, kadang-kadang kita perlu melaksanakan beberapa kod inisialisasi. Tempat yang baik untuknya adalah blok inisialisasi, yang diawali dengan kata kunci init .

Blok inisial dipanggil selepas pembina utama . Kami juga dapat mengakses medan kelas di tempat ini.

Kelas boleh mempunyai satu atau lebih blok init .

Mari tambahkan blok inisialisasi ke kelas Person kami :

init { println("Hello, I'm $name") if (surname.isEmpty()) { throw IllegalArgumentException("Surname cannot be empty!") } }

Seterusnya, apabila kita membuat objek kelas Person , kita akan melihat di konsol:

Hello, I'm John

Kami akan membuang IllegalArgumentException untuk nama keluarga kosong .

Apabila kita mempunyai banyak blok init , blok tersebut akan dijalankan dalam urutan yang sama seperti yang terdapat di badan kelas.

5. Pembina Sekunder

Dalam kelas Kotlin, kita juga boleh menyatakan satu atau lebih pembina sekunder . Pembina sekunder diawali dengan kata kunci pembina :

class Car { val id: String val type: String constructor(id: String, type: String) { this.id = id this.type = type } }

Dan penggunaan asas:

fun main(args: Array) { val car = Car("1", "sport") val suvCar = Car("2", "suvCar") } 

Setiap konstruktor sekunder harus mewakilkan kepada konstruktor utama . Kami akan melakukannya dengan kata kunci ini .

Mari pindahkan sifat kami ke konstruktor utama dan ubah suai konstruktor sekunder:

class Car(val id: String, val type: String) { constructor(id: String): this(id, "unknown") }

6. Pembina dan Warisan

Kita boleh menggunakan pembina utama superclass.

Perhatikan bahawa semua kelas di Kotlin adalah muktamad . Ini bermaksud kita perlu menambahkan kata kunci terbuka supaya kita dapat mewarisi dari kelas Orang kita .

Mari tambah kelas Pekerja yang mewarisi kelas Person . Mereka berdua menggunakan pembina utama:

class Employee(name: String, val salary: Int): Person(name) 

Dengan melakukan ini, kami memberikan nama kepada pembina utama kelas Person . Selain itu, kami menambah bidang baru yang disebut gaji di kelas Pekerja .

7. Kesimpulannya

Dalam artikel ringkas ini, kami membincangkan pelbagai cara membuat pembina dalam bahasa Kotlin. Kita dapat mewujudkan ladang kita dengan pelbagai cara, mengikut kehendak kita.

Pelaksanaan semua contoh kami boleh didapati dalam projek Github.

Untuk maklumat lebih lanjut mengenai ciri Kotlin itu sendiri, lihat pengenalan kami tentang Kotlin.