0Pricing
Kotlin Academy · Pelajaran

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

  1. Deklarasi object: Singleton Kotlin
  2. companion object: Anggota Bergaya Statis di Kotlin
  3. Objek Anonim dan Ekspresi Object
  4. Metode Factory dengan companion object
← Kembali ke Kotlin Academy