ลักษณะที่ปิดผนึกเป็นเช่นเดียวกับชั้นเรียนที่ปิดผนึก?
เท่าที่sealed
ไปใช่ พวกเขาแบ่งปันความแตกต่างปกติระหว่างtrait
และclass
แน่นอน
หรือถ้าไม่อะไรคือความแตกต่าง?
ดำริ
เป็นความคิดที่ดีที่จะใช้คุณลักษณะที่ปิดสนิทเมื่อใด (และเมื่อใด)
หากคุณมี a sealed class X
คุณต้องตรวจสอบX
เช่นเดียวกับคลาสย่อยใด ๆ เช่นเดียวกับที่ไม่เป็นความจริงของหรือsealed abstract class X
sealed trait X
ดังนั้นคุณสามารถทำได้sealed abstract class X
แต่นั่นเป็นวิธีที่ verbose มากกว่าเพียงแค่trait
และเพื่อประโยชน์น้อย
ข้อได้เปรียบหลักของการใช้แบบabstract class
over a trait
ก็คือสามารถรับพารามิเตอร์ได้ ข้อได้เปรียบนั้นมีความเกี่ยวข้องโดยเฉพาะอย่างยิ่งเมื่อใช้คลาสประเภท สมมติว่าคุณต้องการสร้างต้นไม้เรียงตัวอย่างเช่น คุณสามารถเขียนสิ่งนี้:
sealed abstract class Tree[T : Ordering]
แต่คุณไม่สามารถทำสิ่งนี้:
sealed trait Tree[T : Ordering]
เนื่องจากขอบเขตบริบท (และขอบเขตการดู) ถูกนำไปใช้พร้อมกับพารามิเตอร์โดยนัย เนื่องจากคุณลักษณะนั้นไม่สามารถรับพารามิเตอร์ได้คุณจึงไม่สามารถทำเช่นนั้นได้
ส่วนตัวผมชอบและใช้มันจนกว่าเหตุผลบางอย่างโดยเฉพาะอย่างยิ่งทำให้ฉันใช้sealed trait
sealed abstract class
และฉันไม่ได้พูดถึงเหตุผลที่ละเอียดอ่อน แต่เหตุผลในหน้าของคุณคุณไม่สามารถเพิกเฉยได้เช่นการใช้คลาสประเภท