25

मेरे पास स्कैला में एक सेट है (मैं सेट को बना रहा हूं, इसलिए मैं कोई भी कार्यान्वयन चुन सकता हूं। जावा लाइब्रेरी जिसका उपयोग मैं कर रहा हूं वह जावा.टिल.सेट [स्ट्रिंग] की उम्मीद कर रहा है।स्कैला को जावा में परिवर्तित करें (java.util.Set)?

निम्नलिखित सही तरीका है स्काला में यह कर (अंतर्निहित scala.collection.jcl.HashSet # का उपयोग कर):

import com.javalibrary.Animals 

var classes = new scala.collection.jcl.HashSet[String] 
classes += "Amphibian" 
classes += "Reptile" 
Animals.find(classes.underlying) 

यह काम कर रहा है, लेकिन जब से मैं स्काला करने के लिए बहुत नया हूँ मैं अगर यह पसंदीदा तरीका है जानना चाहता हूँ (किसी भी दूसरी तरफ मैं कोशिश करता हूं कि मुझे टाइप-मिस्चैच त्रुटि मिल रही है):

error: type mismatch; 
found : scala.collection.jcl.HashSet[String] 
required: java.util.Set[_] 

उत्तर

23

यदि आप स्कैला 2.8 के बारे में पूछ रहे थे, तो जावा संग्रह इंटरऑपरेबिलिटी scala.collection.JavaConversions द्वारा आपूर्ति की जाती है। इस मामले में, आप JavaConversions.asSet (...) चाहते हैं (प्रत्येक दिशा के लिए एक है, जावा -> स्कैला और स्कैला -> जावा)।

स्कैला 2.7 के लिए, प्रत्येक scala.collection.jcl क्लास जो जावा संग्रह को लपेटता है, underlying संपत्ति है जो लपेटा गया जावा संग्रह उदाहरण प्रदान करता है।

+0

कि पता करने के लिए अच्छा है! मैं स्कैला 2.7 में था। – arnab

7

स्काला 2.12.0 scala.collection.JavaConversionsis deprecated के बाद से:

इसलिए, इस एपीआई पदावनत किया गया है और JavaConverters बजाय प्रयोग किया जाना चाहिए। JavaConverters एक ही रूपांतरण प्रदान करता है, लेकिन विस्तार विधियों के माध्यम से।

और चूंकि स्काला 2.8.1 आप कर सकते हैं usescala.collection.JavaConverters इस उद्देश्य के लिए:

import scala.collection.JavaConverters._ 
val javaSet = new java.util.HashSet[String]() 
val scalaSet = javaSet.asScala 
val javaSetAgain = scalaSet.asJava 
0

स्काला 2.12 में इसका इस्तेमाल करने के लिए संभव है: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

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