sifat tersegel adalah sama dengan kelas tersegel?
Sejauh ini sealed
, ya. Mereka berbagi perbedaan normal antara trait
dan class
, tentu saja.
Atau, jika tidak, apa perbedaannya?
Moot.
Kapan ide yang baik untuk menggunakan sifat tersegel (dan kapan tidak)?
Jika Anda memiliki sealed class X
, maka Anda harus memeriksa X
dan juga setiap subclass. Hal yang sama tidak berlaku untuk sealed abstract class X
atau sealed trait X
. Jadi Anda bisa melakukannya sealed abstract class X
, tetapi itu jauh lebih bertele-tele daripada hanya trait
dan untuk sedikit keuntungan.
Keuntungan utama menggunakan abstract class
over trait
adalah dapat menerima parameter. Keuntungan itu sangat relevan ketika menggunakan kelas tipe. Katakanlah Anda ingin membuat pohon yang disortir, misalnya. Anda dapat menulis ini:
sealed abstract class Tree[T : Ordering]
tetapi Anda tidak dapat melakukan ini:
sealed trait Tree[T : Ordering]
karena batas konteks (dan batas tampilan) diimplementasikan dengan parameter implisit. Mengingat bahwa sifat tidak dapat menerima parameter, Anda tidak dapat melakukannya.
Secara pribadi, saya lebih suka sealed trait
dan menggunakannya kecuali beberapa alasan tertentu membuat saya menggunakan a sealed abstract class
. Dan saya tidak berbicara tentang alasan yang halus, tetapi alasan yang tidak bisa Anda abaikan, seperti menggunakan kelas tipe.