Dalam artikel ini, anda akan belajar mengenai kelas yang dimeteraikan, bagaimana kelas dibuat, dan kapan menggunakannya dengan bantuan contoh.
Kelas tertutup digunakan apabila nilai hanya boleh memiliki salah satu jenis dari kumpulan terhad (hierarki terhad).
Sebelum membincangkan butiran mengenai kelas yang dimeteraikan, mari kita meneroka masalah yang mereka selesaikan. Mari kita ambil contoh (diambil dari laman web rasmi Kotlin - artikel kelas yang dimeteraikan):
class Expr class Const(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") )
Dalam program di atas, kelas asas Expr mempunyai dua kelas turunan Const (mewakili nombor) dan Sum (mewakili jumlah dua ungkapan). Di sini, wajib menggunakan else
cabang untuk keadaan lalai ketika ungkapan.
Sekarang, jika anda memperoleh subkelas baru dari Expr
kelas, penyusun tidak akan mengesan apa-apa kerana else
cawangan mengendalikannya yang boleh menyebabkan pepijat. Akan lebih baik sekiranya penyusun mengeluarkan ralat ketika kita menambahkan subkelas baru.
Untuk menyelesaikan masalah ini, anda boleh menggunakan kelas tertutup. Seperti yang disebutkan, kelas tertutup menyekat kemungkinan membuat subkelas. Dan, apabila anda mengendalikan semua subkelas kelas tertutup dalam when
ungkapan, tidak perlu menggunakan else
cabang.
Untuk membuat kelas tertutup, pengubah dimeterai digunakan. Sebagai contoh,
kelas tertutup Expr
Contoh: Kelas Dimeteraikan
Inilah cara anda dapat menyelesaikan masalah di atas menggunakan kelas tertutup:
sealed class Expr class Const(val value: Int) : Expr() class Sum(val left: Expr, val right: Expr) : Expr() object NotANumber : Expr() fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) NotANumber -> java.lang.Double.NaN )
Seperti yang anda lihat, tidak ada else
cabang. Sekiranya anda memperoleh subkelas baru dari Expr
kelas, penyusun akan mengeluh kecuali subkelas dikendalikan dalam when
ungkapan.
Beberapa Nota Penting
- Semua subkelas kelas tertutup mesti diisytiharkan dalam fail yang sama di mana kelas dimeteraikan diisytiharkan.
- Kelas tertutup abstrak dengan sendirinya, dan anda tidak dapat menunjukkan objek daripadanya.
- Anda tidak boleh membuat pembina bukan kelas tertutup; pembina mereka
private
secara lalai.
Perbezaan Antara Kelas Enum dan Dimeteraikan
Kelas enum dan kelas tertutup agak serupa. Kumpulan nilai untuk jenis enum juga terhad seperti kelas tertutup.
Satu-satunya perbezaan adalah bahawa, enum dapat memiliki satu contoh, sedangkan subkelas kelas tertutup dapat memiliki beberapa contoh.