Konstruktor Kotlin

1. Ikhtisar

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

Mari kita mulai dengan rekap singkat konsep: kita menggunakan konstruktor untuk membuat objek. Ini terlihat seperti deklarasi metode, tetapi selalu memiliki nama yang sama dengan kelas dan tidak mengembalikan apa pun.

Untuk penyiapan proyek Kotlin, lihat tutorial pengantar kami.

Di Kotlin, sebuah kelas dapat memiliki konstruktor utama dan satu atau beberapa konstruktor sekunder tambahan.

Di bagian selanjutnya, kita akan membahas setiap jenis dan konsep terkait.

2. Pembuat Utama

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

Ini adalah bagian dari tajuk kelas. Parameter mungkin juga bidang kelas, yang kita tempatkan setelah deklarasi kelas.

Mari kita lihat deklarasi kelas dasar, dengan dua properti dan konstruktor utama:

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

Dalam contoh ini, kami telah mendeklarasikan properti melalui kata kunci val . Ini berperilaku sama seperti variabel biasa, dengan menyebutkan bahwa properti val adalah hanya-baca ( pasangan kata kunci akhir Java ).

Jika kita ingin mengubah referensi nanti, kita harus menggunakan kata kunci var sebagai gantinya. Namun, kami tidak dapat menghilangkan jenis bidang di konstruktor utama, karena ini harus eksplisit.

Dalam beberapa kasus, kita dapat menghilangkan kata kunci konstruktor . Ini hanya wajib dalam dua kasus: saat kami menggunakan anotasi, seperti @Autowired atau pengubah akses, seperti pribadi atau dilindungi .

Selain itu, kita dapat menggunakan parameter default Kotlin di konstruktor.

Selanjutnya, mari kita lihat bagaimana kita dapat menggunakan konstruktor utama kita:

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

Kita dapat melihat bahwa nama kelas adalah pemanggilan konstruktor. Tidak perlu menggunakan kata kunci baru .

Sebagai referensi, mari kita juga melihat padanan 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 membutuhkan lebih banyak kode untuk mencapai hasil yang sama.

2.1. Konstruktor Utama di JVM

Harap dicatat bahwa kompilator akan menghasilkan konstruktor tambahan tanpa parameter pada JVM. Untuk tujuan ini, ini akan membuat instance objek dengan nilai default.

Dengan cara ini, Kotlin dapat bekerja dengan baik dengan library seperti Jackson atau JPA, yang menggunakan konstruktor no-args untuk membuat instance kelas:

class Person(val name: String = "")

3. Menginisialisasi Properti dari Parameter Konstruktor

Penginisialisasi properti dari badan kelas dapat menggunakan parameter konstruktor utama.

Mari ubah nama menjadi properti upperCaseName :

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

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

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

4. Blok Penginisialisasi

Kami tidak dapat meletakkan kode apa pun di konstruktor utama.

However, we sometimes have to execute some initialization code. A good place for it is an initializer block, which is prefixed with the init keyword.

The initializer block is called after the primary constructor. We can also access class fields in this place.

A class can have one or more init blocks.

Let's append the initializer block to our Person class:

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

Next, when we create a Person class object, we'll see in the console:

Hello, I'm John

We would throw IllegalArgumentException for the empty surname.

When we have many init blocks, they will be executed in the same order as they appear in the class body.

5. Secondary Constructor

In a Kotlin class, we can also declare one or more secondary constructors.Secondary constructors are prefixed with the constructor keyword:

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

And the basic usage:

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

Each secondary constructor has to delegate to the primary constructor. We'll do this by this keyword.

Let's move our properties to the primary constructor and modify secondary constructor:

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

6. Constructors and Inheritance

We can use a primary constructor of the superclass.

Note that all classes in Kotlin are final by default. This means we'll need to add the open keyword so that we can inherit from our Person class.

Mari tambahkan kelas Karyawan yang diwarisi dari kelas Person . Keduanya menggunakan konstruktor utama:

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

Dengan melakukan ini, kami mengirimkan nama ke konstruktor utama kelas Person . Selain itu, kami menambahkan bidang baru yang disebut gaji di kelas Karyawan .

7. Kesimpulan

Dalam artikel singkat ini, kami membahas berbagai cara membuat konstruktor dalam bahasa Kotlin. Kami dapat membuat contoh bidang kami dengan berbagai cara, sesuai dengan keinginan kami.

Penerapan semua contoh kami dapat ditemukan di proyek Github.

Untuk informasi lebih lanjut tentang fitur Kotlin itu sendiri, silakan lihat pengantar kami untuk Kotlin.