Objek Anonim dan Ekspresi Object
Gunakan ekspresi object untuk membuat implementasi interface sekali pakai.
Objek Anonim dan Ekspresi Object adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Ekspresi Objek
Ekspresi objek membuat instans anonim satu kali dari suatu kelas atau antarmuka—padanan Kotlin untuk kelas dalam anonim milik Java, tetapi lebih canggih.
Menerapkan Antarmuka Secara Anonim
Gunakan object : Interface { ... } untuk membuat implementasi sebaris.
interface ClickListener {
fun onClick(): String
}
fun main() {
val listener = object : ClickListener {
override fun onClick() = "clicked!"
}
println(listener.onClick())
}Kelas Anonim dengan Status
Objek anonim dapat menyimpan status dan memiliki beberapa metode.
fun main() {
val counter = object {
var count = 0
fun inc() { count++ }
fun show() = println("count = $count")
}
counter.inc(); counter.inc(); counter.inc()
counter.show()
}Tipe Objek Anonim
Tipe objek anonim ditentukan secara inferensi. Jika dideklarasikan pada tingkat fungsi, Anda tetap dapat mengakses anggotanya yang khusus.
fun main() {
val pair = object {
val left = "L"
val right = "R"
}
println("${pair.left} and ${pair.right}")
}Eksposur Tipe Anonim
Jika objek anonim dikembalikan dari fungsi dengan tipe yang ditentukan secara inferensi, pemanggil hanya melihat supertipe—tambahan anonim tersebut tidak dapat diakses dari luar.
fun makeListener() = object {
fun greet() = "hello"
}
fun main() {
val l = makeListener()
println(l.greet()) // OK — same compilation unit
}Beberapa Antarmuka
Sebuah objek anonim dapat menerapkan beberapa antarmuka dalam satu ekspresi.
interface Closeable { fun close() }
interface Flushable { fun flush() }
fun main() {
val resource = object : Closeable, Flushable {
override fun close() = println("closed")
override fun flush() = println("flushed")
}
resource.flush()
resource.close()
}Memperluas Kelas
Objek anonim dapat memperluas kelas terbuka sambil mengganti anggota-anggotanya.
open class Animal(val name: String) {
open fun speak() = "$name makes a sound"
}
fun main() {
val pet = object : Animal("Rex") {
override fun speak() = "$name barks!"
}
println(pet.speak())
}Menangkap Variabel Enkapsulasi
Objek anonim mempertahankan variabel dalam lingkup yang membungkusnya (membaca dan mengubahnya)—berbeda dari persyaratan Java untuk final.
fun main() {
var log = mutableListOf<String>()
val recorder = object {
fun record(s: String) { log.add(s) }
}
recorder.record("event 1")
recorder.record("event 2")
println(log)
}Kapan Menggunakan Objek Anonim
Gunakan objek anonim untuk implementasi satu kali yang tidak layak memiliki kelas sendiri—biasanya callback, pemantau, dan pembanding.
fun main() {
val nums = listOf(3, 1, 4, 1, 5, 9, 2, 6)
val sorted = nums.sortedWith(object : Comparator<Int> {
override fun compare(a: Int, b: Int) = b - a // descending
})
println(sorted)
}Utamakan Lambda Jika Memungkinkan
Jika antarmuka memiliki satu metode abstrak (SAM), lambda lebih rapi daripada ekspresi objek.
fun main() {
val nums = listOf(3, 1, 4, 1, 5, 9)
// Old way:
val sorted1 = nums.sortedWith(object : Comparator<Int> {
override fun compare(a: Int, b: Int) = b - a
})
// New way — SAM conversion:
val sorted2 = nums.sortedWith(Comparator { a, b -> b - a })
println("$sorted1 / $sorted2")
}Objek Anonim vs Objek yang Dideklarasikan
Gunakan object Name untuk singleton bernama. Gunakan object : Type dalam ekspresi untuk instans anonim satu kali.
// Named singleton (one instance, accessed globally)
object GlobalLogger { fun log(m: String) = println("[L] $m") }
// Anonymous (created at expression evaluation)
fun main() {
val local = object { fun hi() = "hi" }
GlobalLogger.log("hello")
println(local.hi())
}Pemeriksaan Singkat
Sintaks apa yang membuat instans anonim yang menerapkan antarmuka secara sebaris?
Rangkuman
Ekspresi objek membuat instans anonim satu kali secara sebaris. Ekspresi ini dapat menerapkan antarmuka, memperluas kelas, menyimpan status, dan mempertahankan variabel dari lingkup yang membungkusnya. Utamakan lambda untuk antarmuka dengan satu metode; gunakan ekspresi objek saat Anda memerlukan beberapa metode atau status.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Objek Anonim dan Ekspresi Object” gratis?
Ya — teks lengkap “Objek Anonim dan Ekspresi Object” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Objek Anonim dan Ekspresi Object”?
Gunakan ekspresi object untuk membuat implementasi interface sekali pakai. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Objek Anonim dan Ekspresi Object” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Deklarasi object: Singleton Kotlin
- companion object: Anggota Bergaya Statis di Kotlin
- Objek Anonim dan Ekspresi Object
- Metode Factory dengan companion object