2012-09-10 25 views
7

मैंने स्कैला में एक एपीआई लिखा है। कुछ प्रविष्टि बिंदु हैं जहां मैं एक सूची [SomeTrait] इनपुट के रूप में और एक सूची [अन्य जल] वापस लौटने की उम्मीद कर रहा हूं।जावा से कॉलिंग स्कैला कोड java.util.List के साथ जब स्कैला की सूची की उम्मीद है

मैं जावा प्रोजेक्ट में उपयोग के लिए जार समेत हूं और java.util पास करने की कोशिश में एक समस्या में भाग गया। स्कैला की सूची वस्तु की अपेक्षा करने वाली विधि में सूचीबद्ध करें। मुझे एहसास है कि वे वही नहीं हैं और जावा नहीं जानता कि रूपांतरण कैसे करें। तो, जावा कॉलर को स्कैला सूची में पास करने की अपेक्षा किए बिना आप यह काम कैसे करते हैं?

उत्तर

7

मुझे अन्य सुझाव सुनना अच्छा लगेगा लेकिन यह वह समाधान है जिसे मैंने पाया है और मुझे इसे Google पर कहीं भी नहीं मिला।

def doSomething(things: List[Thing]): List[Result] = { ... } 

मैं इस तरह एक और पद्धति जोड़ें::

//import scala.collection.JavaConversions._ 
import scala.collection.JavaConverters._ 

def doSomething(things: java.util.List[Thing]): java.util.List[Result] = 
    doSomething(things.asScala.toList).asJava 

मूल करने के लिए कॉल में स्पष्ट रूपांतरण

अगर मेरे सामान्य स्काला प्रवेश बिंदु एक विधि कुछ इस तरह है कि है विधि इसलिए है क्योंकि यह एक अनंत लूप कॉलिंग में समाप्त हो जाएगी।

यह मेरे अपने प्रश्न का उत्तर देने और जवाब देने का पहला प्रयास है ... क्षमा करने के लिए अगर मुझे ऐसा करने का कुछ मानक तरीका याद आया। ऐसा लगता है कि यह साझा करने लायक था और बेहतर तरीकों पर चर्चा के लिए खुलने के लायक भी है क्योंकि मैं स्कैला के लिए बहुत नया हूं।

संपादित अपडेट किया गया कोड @Luigi Plinge

+0

वास्तव में इस सवाल का जवाब मैं के बारे में –

+4

पोस्ट करने के लिए आप 'JavaConversions' खाई और परिणाम एक जावा सूची वापस करने के लिए परिवर्तित .asJava' का उपयोग कर' चाहिए थी कि से सुझाव प्रतिबिंबित करने के लिए –

+1

+1 लुइगी के सुझाव के लिए, JavaConversions का उपयोग न करें, JavaConverters और स्पष्ट .asJava/.asScala विधियों का उपयोग न करें - निहित रूपांतरण अजीब चीजें कर सकते हैं। ओवरलोडिंग से बचें, बजाय जावा से कॉल करने के लिए एक शिम/रैपर बनाएं। –