2012-03-21 10 views
12

संभव डुप्लिकेट:
What is the rationale behind having companion objects in Scala?स्काला: साथी वस्तु उद्देश्य

मेरी पिछली पोस्ट (Scala: companion objects and "new" keyword) के लिए सभी प्रतिक्रियाओं के लिए धन्यवाद। मैं आपसे पूछना चाहता हूं कि स्कैला में एक साथी वस्तु का सामान्य उद्देश्य क्या है? सबसे पहले, क्या हम कक्षा में स्वयंसेवी/विधि परिभाषा के रूप में लागू होने जैसी सभी विधियों को शामिल नहीं कर सकते थे? इसके अलावा, एक सहयोगी बूलियन ऑब्जेक्ट का बिंदु क्या है, क्योंकि यह लागू विधि को भी परिभाषित नहीं करता है?

आपके सभी प्रतिक्रियाओं के लिए अग्रिम धन्यवाद।

+0

[नीचे उत्तर] (http://stackoverflow.com/a/9806136/39396) डुप्लिकेट के स्वीकृत उत्तर से बेहतर है। –

उत्तर

18

साथी वस्तुओं के लिए आवश्यक हैं:

  • घोषित जो अन्यथा स्थिर होगा साथी की क्लास से संबंधित तरीकों
  • घोषित (जावा में विपरीत, आप एक स्थिर विधि स्काला में वर्ग के भीतर ही घोषित नहीं कर सकते हैं) unapply और unapplySeq तरीकों कस्टम एक्सट्रैक्टर्स परिभाषित करने के लिए पैटर्न मिलान के लिए (here देखें)
  • घोषित apply विधि है जो आम तौर पर एक कारखाने विधि है कि विशेष वर्ग की वस्तुओं बनाता है (लेकिन होना जरूरी नहीं है) के रूप में प्रयोग किया जाता है
  • साथी वस्तुओं निजी क्षेत्रों और उनके सहयोगी विशेषता/वर्ग के तरीकों का उपयोग कर सकते हैं - जब एक खास प्रकार के एक अंतर्निहित मूल्य की तलाश में - कि खास विशेषता/वर्ग
  • वे implicit resolution के लिए महत्वपूर्ण हैं पर स्थिर आपरेशन बनाने के लिए उपयोगी , उस प्रकार के साथी ऑब्जेक्ट को यह देखने का निरीक्षण किया जाता है कि क्या संबंधित implicit परिभाषा मौजूद है; this blog post

में Scala specification में निहित संकल्प या एक संक्षिप्त सारांश की सटीक नियम देखने स्काला मानक पुस्तकालय में Boolean वस्तु तरीकों box और unbox आदिम बूलियन्स और उनके लिपटे, वस्तु अभ्यावेदन के बीच परिवर्तित करने के लिए इस्तेमाल किया जा सकता है। यह अतिरिक्त रूप से (वर्तमान में) @specialized एनोटेशन के लिए तर्क के रूप में उपयोग किया जाता है, इस बात को इंगित करने के लिए कि किस आदिम प्रकार को कक्षा को विशेषीकृत करने की आवश्यकता है।

+0

तो बुलियन के मामले में, बॉक्स/अनबॉक्स जावा के लिए एक स्थिर-जैसी विधि की भूमिका निभाता है? जावा में हमारे पास बूलियन.बॉक्स (बूलियन बी) परिभाषा होगी? – Bober02

+1

यदि आपने जावा प्रोग्राम के भीतर से स्कैला मानक लाइब्रेरी का उपयोग किया है, तो आप 'बॉक्स' विधि को स्थैतिक विधि के रूप में देखेंगे। – axel22

संबंधित मुद्दे