Kotlin Academy · Pelajaran

Objek tanpa nama

Pelaksanaan sebaris

Pelajaran 3 daripada 413 langkah

Objek tanpa nama ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Pelaksanaan Sebaris

Objek tanpa nama mencipta tika kelas atau antara muka tanpa menamakan kelas baharu. Gunakan ungkapan object.

interface Greeter { fun greet(): String }

fun main() {
    val g = object : Greeter {
        override fun greet() = "Hi"
    }
    println(g.greet())
}

Melaksanakan Antara Muka

Ungkapan objek boleh melaksanakan satu atau lebih antara muka tepat di tempat objek itu diperlukan.

interface Clickable { fun click() }

fun main() {
    val button = object : Clickable {
        override fun click() = println("Clicked")
    }
    button.click()
}

Mengatasi Ahli Kelas

Anda boleh membuat subkelas tanpa nama daripada kelas terbuka dan mengatasi ahlinya.

open class Animal { open fun sound() = "..." }

fun main() {
    val cat = object : Animal() {
        override fun sound() = "Meow"
    }
    println(cat.sound())
}

Menyimpan Keadaan Tambahan

Objek tanpa nama boleh mengisytiharkan sifatnya sendiri selain sifat yang diatasinya.

fun main() {
    val point = object {
        val x = 3
        val y = 4
    }
    println("${point.x}, ${point.y}")
}

Objek Tanpa Jenis Super

Jika anda tidak menyatakan jenis super, objek itu hanyalah himpunan ahli secara ad hoc yang berguna untuk pengumpulan setempat dengan cepat.

fun main() {
    val config = object {
        val retries = 3
        val timeout = 30
    }
    println(config.retries)
}

Menangkap Pemboleh Ubah Setempat

Objek tanpa nama boleh menangkap pemboleh ubah daripada skop yang mengandunginya, tidak seperti kelas tersarang yang bersifat static.

fun makeCounter(start: Int): () -> Int {
    var count = start
    val obj = object {
        fun next() = count++
    }
    return { obj.next() }
}

fun main() {
    val c = makeCounter(10)
    println(c())
    println(c())
}

Sebagai Pendengar

Kegunaan lazimnya ialah menghantar pelaksanaan sebaris sebagai panggil balik atau pendengar.

interface OnDone { fun done(result: Int) }

fun compute(cb: OnDone) {
    cb.done(42)
}

fun main() {
    compute(object : OnDone {
        override fun done(result: Int) = println("Got $result")
    })
}

Jenis Objek Tanpa Nama

Apabila dikembalikan daripada fungsi, jenis yang disimpulkan ialah jenis super yang diisytiharkan, atau Any jika tiada jenis super. Ahli tambahan hanya kelihatan secara setempat.

interface Named { val name: String }

fun make(): Named = object : Named {
    override val name = "X"
}

fun main() {
    println(make().name)
}

Objek Tanpa Nama berbanding Lambda

Untuk antara muka dengan satu kaedah, lambda lebih ringkas, tetapi objek tanpa nama diperlukan apabila anda perlu mengatasi berbilang ahli atau menyimpan keadaan.

interface Handler {
    fun onStart()
    fun onStop()
}

fun main() {
    val h = object : Handler {
        override fun onStart() = println("start")
        override fun onStop() = println("stop")
    }
    h.onStart()
    h.onStop()
}

Ungkapan Objek berbanding Pengisytiharan Objek

Satu ungkapan objek mencipta tika baharu setiap kali. Satu pengisytiharan objek (object Name {}) ialah singleton bernama. Kedua-duanya kelihatan serupa tetapi berbeza dari segi jangka hayat.

object Singleton { val id = 1 }

fun main() {
    val fresh = object { val id = 2 }
    println(Singleton.id)
    println(fresh.id)
}

Pembanding Ringkas

Objek tanpa nama berguna untuk pembanding atau strategi sekali guna.

fun main() {
    val cmp = object : Comparator<Int> {
        override fun compare(a: Int, b: Int) = b - a
    }
    val list = listOf(1, 3, 2).sortedWith(cmp)
    println(list)
}

Semakan Ringkas

Uji pemahaman anda tentang objek tanpa nama.

Ulang Kaji

Anda telah mempelajari tentang objek tanpa nama:

  • Ungkapan object : Type {} mencipta tika tanpa nama.
  • Objek ini boleh melaksanakan antara muka, membuat subkelas daripada kelas terbuka dan menyimpan keadaan.
  • Objek ini menangkap pemboleh ubah setempat yang mengandungi objek tersebut.
  • Gunakannya untuk panggil balik dengan berbilang kaedah; pilih lambda untuk satu kaedah.
interface Run { fun go() }

fun main() {
    val r = object : Run { override fun go() = println("go") }
    r.go()
}
Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Objek tanpa nama” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Objek tanpa nama”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Objek tanpa nama”?

Pelaksanaan sebaris Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Objek tanpa nama” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kelas bersarang
  2. Kelas dalaman
  3. Objek tanpa nama
  4. Kelas setempat
← Kembali ke Kotlin Academy