Metode yang mengikuti konvensi Java untuk getter dan setter (metode tanpa argumen dengan nama yang dimulai dengan get dan metode argumen tunggal dengan nama yang dimulai dengan set) direpresentasikan sebagai properti di Kotlin. Tapi, Saat membuat properti untuk pasangan pengambil / penyetel Java, Kotlin pada awalnya mencari pengambil. Getter cukup untuk menyimpulkan tipe properti dari tipe getter. Di sisi lain, properti tidak akan dibuat jika hanya ada setter (karena Kotlin tidak mendukung properti set-only saat ini).
Ketika seorang penyetel ikut bermain, proses pembuatan properti menjadi agak ambigu. Alasannya adalah pengambil dan penyetel mungkin memiliki tipe yang berbeda. Selain itu, pengambil dan / atau penyetel dapat diganti dalam subkelas, yang merupakan kasus EditText di android.
Dalam kasus di atas, kelas Android TextView berisi getter
CharSequence getText()
dan kekosongan penyetel
setText(CharSequence)
Jika saya memiliki variabel tipe TextView, kode saya akan berfungsi dengan baik. Tapi saya menggunakan kelas EditText yang berisi getter yang diganti
Editable getText()
yang berarti Anda bisa mendapatkan Editable untuk EditText dan menyetel Editable ke EditText. Oleh karena itu, Kotlin membuat teks properti sintetis berjenis Editable. Karena kelas String tidak dapat diedit, itulah mengapa saya tidak dapat menetapkan instance String ke properti teks kelas EditText.
Sepertinya JetBrains lupa untuk menentukan peran dominan metode pengambil saat membuat properti kotlin untuk metode pengambil dan penyetel Java. Bagaimanapun, saya telah mengirimkan permintaan tarik ke situs web Jet brains kotlin melalui github.
Saya telah merinci masalah di atas dalam posting media ini juga Bagaimana Kotlin Menghasilkan Properti dari Java Getters and Setters (Tidak didokumentasikan oleh Jetbrains)