मुझे नहीं पता कि आपका स्रोत दावा के लिए क्या है कि आपको स्कैला में अमूर्त वर्गों पर विशेषताओं को प्राथमिकता देना चाहिए, लेकिन
- लक्षण जावा अनुकूलता को मुश्किल: फिर से कई कारणों से नहीं कर रहे हैं। यदि आपके पास किसी साथी ऑब्जेक्ट के साथ विशेषता है, तो जावा से साथी ऑब्जेक्ट पर कॉलिंग विधियों को विचित्र
MyType$.MODULE$.myMethod
सिंटैक्स की आवश्यकता होती है। यह साथी वस्तुओं के साथ अमूर्त वर्गों का मामला नहीं है, जो स्थिर और उदाहरण विधियों के साथ एक वर्ग के रूप में JVM पर लागू किए जाते हैं। जावा में कंक्रीट विधियों के साथ एक स्केल विशेषता को कार्यान्वित करना और भी अप्रिय है।
- एक विशेषता के साथ एक विधि को जोड़ना breaks binary compatibility एक वर्ग में ठोस तरीकों को जोड़ने के तरीके में नहीं है।
- लक्षणों के परिणामस्वरूप अधिक बाइटकोड और फॉरवर्डर विधियों के उपयोग से संबंधित कुछ अतिरिक्त ओवरहेड होते हैं।
- लक्षण अधिक शक्तिशाली हैं, जो कि खराब है-सामान्य रूप से आप कम से कम शक्तिशाली अमूर्तता का उपयोग करना चाहते हैं जो काम पूरा हो जाता है। यदि आपको कई विरासतों की आवश्यकता नहीं है जो वे समर्थन करते हैं (और अक्सर आप नहीं करते), तो बेहतर है कि इसका उपयोग न हो।
अंतिम कारण मेरे विचार में अब तक का सबसे महत्वपूर्ण कारण है। स्काला के भविष्य के संस्करणों में कम से कम कुछ अन्य मुद्दे might get fixed, लेकिन यह तब भी रहेगा जब कक्षाओं को डिफॉल्ट करना आपके कार्यक्रमों को ऐसे तरीकों से बाधित करेगा जो कम से कम डिजाइन के साथ संगत (कम से कम तर्कसंगत) हैं। यदि आप तय करते हैं कि वास्तव में आप वास्तव में गुणों द्वारा प्रदान की गई शक्ति चाहते हैं, तो वे अभी भी वहां होंगे, लेकिन यह आपके द्वारा तय किया जाने वाला निर्णय होगा, न कि आप जो कुछ भी फिसलते हैं।
इसलिए नहीं, अन्य जानकारी की अनुपस्थिति में, मैं एक अमूर्त वर्ग (आदर्श रूप से एक मुहरबंद) और दो ठोस वर्गों का उपयोग करने का सुझाव देना चाहता हूं जो कार्यान्वयन प्रदान करते हैं।
स्रोत
2016-02-07 08:53:56
फुटनोट के रूप में, स्केल के रैखिकरण के दृष्टिकोण का दृष्टिकोण एकाधिक विरासत की "समस्या" के लिए एक चालाक समाधान है, और जब आपको इसकी आवश्यकता होती है तो यह काफी अच्छी तरह से काम करता है (फ़ील्ड जैसी कुछ चीजों के अपवाद के साथ)। लेकिन आपको कभी भी कुछ उपयोग नहीं करना चाहिए क्योंकि यह चालाक है। –
धन्यवाद, जो मेरे प्रश्न का उत्तर देता है। मेरा स्रोत https://www.safaribooksonline.com/library/view/scala-cookbook/9781449340292/ch04s13.html था। आपका उत्तर अधिक समझ में आता है हालांकि – kliew
स्कैला [2.12] (http://www.scala-lang.org/news/2.12.0) के साथ # 1-3 अभी भी लागू होता है '' एक विशेषता सीधे सीधे संकलित करता है डिफ़ॉल्ट तरीकों के साथ एक इंटरफ़ेस। यह बाइनरी संगतता और जावा इंटरऑपरेबिलिटी में सुधार करता है। "'? बेशक # 4 एक 'विशेषता' पर 'अमूर्त वर्ग' चुनने के लिए पर्याप्त कारण है, मेरा मानना है। @TravisBrown –