एक मुहरबंद विशेषता एक सील वर्ग के समान है?
जहाँ तक sealed
जाता है, हाँ। वे निश्चित रूप से trait
और class
, के बीच सामान्य अंतर साझा करते हैं ।
या, यदि नहीं, तो क्या अंतर हैं?
विवादास्पद।
सील किए गए विशेषता (और कब नहीं) का उपयोग करना एक अच्छा विचार है?
यदि आपके पास एक है sealed class X
, तो आपको X
किसी भी उपवर्ग के रूप में अच्छी तरह से जांचना होगा । वही सच नहीं है sealed abstract class X
या sealed trait X
। तो आप कर सकते हैं sealed abstract class X
, लेकिन इस तरह से अधिक क्रिया हैtrait
और थोड़े से लाभ के लिए ।
abstract class
ओवर का उपयोग करने का मुख्य लाभ trait
यह है कि यह पैरामीटर प्राप्त कर सकता है। प्रकार वर्ग का उपयोग करते समय यह लाभ विशेष रूप से प्रासंगिक है। उदाहरण के लिए, मान लीजिए कि आप सॉर्ट किए गए ट्री बनाना चाहते हैं। आप इसे लिख सकते हैं:
sealed abstract class Tree[T : Ordering]
लेकिन आप ऐसा नहीं कर सकते:
sealed trait Tree[T : Ordering]
चूंकि संदर्भ सीमा (और दृश्य सीमा) अंतर्निहित मापदंडों के साथ कार्यान्वित की जाती है। यह देखते हुए कि लक्षण मापदंडों को प्राप्त नहीं कर सकते, आप ऐसा नहीं कर सकते।
व्यक्तिगत रूप से, मैं sealed trait
इसे पसंद करता हूं और इसका उपयोग करता हूं जब तक कि कोई विशेष कारण मुझे उपयोग नहीं करता है sealed abstract class
। और मैं सूक्ष्म कारणों के बारे में बात नहीं कर रहा हूं, लेकिन आपके चेहरे के कारणों को आप अनदेखा नहीं कर सकते हैं, जैसे कि प्रकार की कक्षाओं का उपयोग करना।