में पैरामीटर के लिए एकाधिक प्रकार स्वीकार करते हैं मेरे पास एक विधि अद्यतन() दोनों के साथ दो ऑब्जेक्ट्स, ऑब्जेक्टए और ऑब्जेक्टबी हैं। मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो ऑब्जेक्टए या ऑब्जेक्टबी (लेकिन कोई अन्य प्रकार) स्वीकार नहीं करता है। वैचारिक रूप से, यह मैं क्या करने की कोशिश कर रहा हूँ:स्कैला
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
मुझे पता है इस समस्या (जैसे, विधि अद्यतन() की संरचनात्मक टाइपिंग, आम आधार वर्ग, आदि) को हल करने के अन्य तरीके हैं, लेकिन मेरा सवाल यह है कि स्कैला में ऐसा करना संभव है और यदि ऐसा है तो वाक्यविन्यास क्या है? और इसे क्या कहा जाता है?
कैसे आप इस काम करने की उम्मीद करेंगे? कंपाइलर को कैसे पता चलेगा कि टी टी के पास क्या तरीके नहीं थे अगर यह नहीं पता था कि यह किस प्रकार का था? यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी कक्षा में 'अपडेट' है, तो यही संरचनात्मक प्रकार हैं। – dhg
संभावित डुप्लिकेट [क्या स्कैला के पास "प्रकार का संयोजन" (यूनियन प्रकार) है?] (Http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types)। स्वीकार किए गए उत्तर और अगले सबसे अधिक रैंकिंग वाले मेरे अनबॉक्स किए गए यूनियन एन्कोडिंग को सीधे इस प्रश्न को हल करें। –
@dhg, यदि ऑब्जेक्टए और ऑब्जेक्टबी दोनों में एक विधि अद्यतन() है और टाइप टी उन वर्गों में से एक या अन्य को विस्तारित करता है, तो यह पता चल सकता है कि प्रकार टी में एक अद्यतन() विधि है। –