स्काला लक्षण बनाम जावा 8 इंटरफेस के बीच अंतर और सिमिलार्टी क्या हैं?


84

मैं नया हूं, स्काला ने मनोरंजन के लिए भाषा सीखना शुरू कर दिया है और मैं अभी भी इसके चारों ओर अपना सिर लाने की कोशिश कर रहा हूं। स्काला के लक्षणों के बारे में मेरी समझ यह है कि वे जावा इंटरफेस की तरह हैं सिवाय इसके कि कुछ विधियों का कार्यान्वयन हो सकता है।

जावा 8 ऐसे इंटरफेस को जोड़ रहा है जिसमें डिफ़ॉल्ट तरीके हो सकते हैं जहां एक कार्यान्वयन प्रदान किया जा सकता है।

जावा 8 इंटरफेस और स्काला लक्षण के बीच समानताएं और अंतर क्या हैं?


4
उस वेबसाइट की जाँच करें, इससे आपको infoq.com/articles/java-8-vs-scala
akki0996

3
tl; dr: वर्चुअल एक्सटेंशन विधियों [डिफ़ॉल्ट विधियों] के लिए प्राथमिक प्रेरक एपीआई विकास है। एक स्वागत पक्ष प्रभाव यह है कि वे कई विरासत का एक रूप प्रदान करते हैं, जो व्यवहार तक सीमित है। स्काला में लक्षण न केवल व्यवहार की कई विरासत प्रदान करते हैं, बल्कि राज्य के भी हैं। राज्य और व्यवहार की विरासत के अलावा, लक्षण कार्यान्वयन वर्ग के लिए एक संदर्भ प्राप्त करने के लिए एक साधन प्रदान करते हैं ... [स्काला] लक्षण [जावा 8] आभासी विस्तार विधियों की तुलना में सुविधाओं का एक समृद्ध सेट प्रदान करते हैं।
ब्राइस रोन्से

जवाबों:


46

के लिए प्रेरित जावा 8 'डिफ़ॉल्ट तरीकों और स्काला लक्षण भिन्न होते हैं।

पूर्व को सुरक्षित एपीआई विकास और कई वंशानुक्रम के सीमित रूप का समर्थन करने के लिए पेश किया गया था। प्रोजेक्ट लैंबडा में कार्यात्मक प्रोग्रामिंग मुहावरों का लाभ उठाने के साथ, यह जोड़ना फायदेमंद है, उदाहरण के लिए, सभी संभव कार्यान्वयनकर्ताओं को बदलने के बिना इंटरफ़ेस forEach(lambda)करने की एक विधि java.util.Collection(जो कि पिछड़े संगतता को तोड़ने के बिना वास्तव में असंभव है)। साइड इफेक्ट के रूप में इसने मिक्सिन रचना का एक रूप भी पेश किया ।

मॉड्यूलर घटकों की संरचना के लिए बिल्डिंग ब्लॉक के रूप में स्कैला लक्षण खरोंच से डिजाइन किए गए थे। वे कई वंशानुक्रम के अनुकूल हैं और रैखिककरण के कारण मिक्स-इन के मूल्यांकन आदेश पर सख्त नियम होने से हीरे की समस्या नहीं है । वे राज्य का भी समर्थन करते हैं, क्रियान्वयन वर्ग का संदर्भ दे सकते हैं और उन पर प्रतिबंध लगा सकते हैं कि किस प्रकार का मिश्रण हो सकता है। स्कैला संग्रह पुस्तकालय को देखें जहां लक्षण पूरी तरह से उपयोग किए जाते हैं।


क्या आप इस बारे में अधिक विस्तार से बता सकते हैं कि "स्कैल लक्षण को मॉड्यूलर घटकों की संरचना के लिए बिल्डिंग ब्लॉक के रूप में खरोंच से डिजाइन किया गया था।" ?
एडेलिन

14

ध्यान दें कि स्कैला 2.12.0 RC1 (सितंबर 2016) के साथ , Traitअब एक इंटरफेस के लिए संकलित करता है।
स्कैला 2.12 जावा 8 की नई विशेषताओं का इष्टतम उपयोग करने के बारे में है

जावा 8 को इंटरफेस में ठोस तरीकों की अनुमति देने के साथ, स्काला 2.12 एकल इंटरफ़ेस के लिए एक लक्षण संकलित करने में सक्षम है।

इससे पहले, एक विशेषता को एक वर्ग के रूप में दर्शाया गया था जिसने विधि कार्यान्वयन और एक इंटरफ़ेस रखा था
ध्यान दें कि पर्दे के पीछे प्रदर्शन करने के लिए कंपाइलर के पास अभी भी काफी जादू है, ताकि जावा में एक विशेषता को लागू करने के लिए ध्यान रखा जाए।
(संक्षेप में, यदि कोई विशेषता निम्नलिखित उपवर्गों में से किसी को भी सिंथेटिक कोड की आवश्यकता होती है: फ़ील्ड को परिभाषित करना, शरीर में सुपर, इनिशियलाइज़र स्टेटमेंट को कॉल करना, एक वर्ग का विस्तार करना, सही सुपर विशेषता में कार्यान्वयन खोजने के लिए रैखिककरण पर निर्भर होना।)

कार्यान्वयन के अंतर को scala PR 5003 देखें ।


4

समानता पर, दोनों में डिफ़ॉल्ट तरीके हो सकते हैं,

मतभेद पक्ष, हम केवल उदाहरण के लिए लक्षण जोड़ सकते हैं, और पूरे वर्ग के लिए भी नहीं। उदाहरण:

trait A { def m = ??? }
class B 

new B() with A 

बुद्धिमान की तरह हम उदाहरण के लिए विशेषता परतों को जोड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.