2011-03-13 5 views
15

से स्कैला के विकल्प कन्स्ट्रक्टर को कैसे कॉल करें मैं मिश्रित जावा/स्कैला प्रोजेक्ट पर काम कर रहा हूं, और मैं जावा से स्काला ऑब्जेक्ट की विधि को कॉल करने का प्रयास कर रहा हूं। यह विधि पैरामीटर के रूप में Option[Double] लेती है। मैंने सोचा कि यह काम करेगा:जावा

Double doubleValue = new Double(1.0); 
scalaObj.scalaMethod(new Some(doubleValue)); 

लेकिन ग्रहण मुझे बताता है "निर्माता कुछ (डबल) अपरिभाषित है"।

क्या मुझे scala.Some के लिए कन्स्ट्रक्टर को अलग-अलग कॉल करना चाहिए?

+1

जावा में, _methods_ के लिए प्रकार पैरामीटर अनुमान लगाया जा सकता है (कभी कभी), लेकिन _constructors_ कभी नहीं के लिए प्रकार पैरामीटर। –

+0

@Alexey जानना अच्छा है, मुझे लगता है कि शायद मेरी परेशानियों का स्रोत है। मुझे अभी भी समस्याएं आ रही हैं, भले ही मैं 'कुछ ' पैरामीटर करता हूं, हालांकि (@ user654801 से उत्तर पर मेरी टिप्पणी देखें)। – pkaeding

उत्तर

35

स्काला में आप सामान्य रूप से विकल्प के लिए लिफ्ट इस प्रकार है:

scala> val doubleValue = Option(1.0) 
doubleValue: Option[Double] = Some(1.0) 

()के लिए एक वाक्यात्मक चीनी हैकी साथी वस्तु कीविधि। इसलिए, यह सीधे जावा में बुलाया जा सकता है:

Option<Double> doubleValue = Option.apply(1.0); 
+2

बिंगो, वह था। धन्यवाद! – pkaeding

+0

इससे मुझे भी मदद मिली। स्काला 'डीईएफ़ startServer (localBind: विकल्प [इंट] = कोई नहीं): यूनिट = {...}' जावा कॉल 'विकल्प तो = Option.apply (9002);' ' AcmeClient। startServer (ताकि); ' – drusolis

1

आपको लगता है कि जिस तरह से एक कुछ उदाहरण निर्माण कर सकते हैं, यह मेरे लिए संकलित,

Some<Double> d = new Some<Double>(Double.valueOf(1)); 

समस्या लापता जेनरिक हो सकता है,, करने का प्रयास करें

scalaObj.scalaMethod(new Some<Double>(doubleValue)); 
+0

हम्म, जब मैं कोशिश करता हूं तो मुझे मिलता है कि "कुछ प्रकार सामान्य नहीं है; इसे तर्कों के साथ पैरामीटर किया जा सकता है"। क्या यह ग्रहण/स्काला एकीकरण में कमी हो सकती है? मेरे पास 'आयात स्केल है। कुछ;' तो मुझे विश्वास है कि मैं सही 'कुछ' का उपयोग कर रहा हूं। – pkaeding

+5

इस दृष्टिकोण में 'कोई नहीं' के बजाय 'कुछ (शून्य) 'के' शून्य' संदर्भ को उठाने का नकारात्मक पक्ष है। सही उठाने के लिए आप बेहतर 'विकल्प' साथी ऑब्जेक्ट का उपयोग करेंगे। –

+0

@ वासिल, धन्यवाद, यह समझ में आता है। आपके (अन्य) उत्तर ने मेरी समस्या हल की। – pkaeding