मेरे पास मेरे स्कैला कोड में जावा फ़ंक्शन के लिए निम्न कॉल है:

 val result = javaObject.javaFunction().asInstanceOf[ArrayList[ArrayList[String]]]

मैं परिणाम को ArrayList[ArrayList[String]] से Seq[Seq[String]] में बदलता हूं:

import collection.JavaConverters._
val result2 = result.asScala.toSeq.map( _.asScala.toSeq)

यह संकलित करता है, लेकिन निष्पादन पर मुझे मिलता है:

java.lang.ClassCastException: java.util.Collections$UnmodifiableRandomAccessList को java.util.ArrayList पर नहीं डाला जा सकता है

ऐसा क्यों होता है और इसे कैसे ठीक किया जाए?

1
ps0604 16 अप्रैल 2018, 01:27

1 उत्तर

सबसे बढ़िया उत्तर

आपने गलत प्रकार का अनुमान लगाया है, और क्लास कास्ट अपवाद मिला है। asInstanceOf में बस कम प्रतिबंधात्मक प्रकार का उपयोग करें:

 val result = javaObject.javaFunction().
   asInstanceOf[java.util.List[java.util.List[String]]]

क्योंकि एक अंतर्निहित रूपांतरण विधि है

asScalaBufferConverter[A](l: List[A]): AsScala[Buffer[A]]

JavaConverters में, java.util.List प्रकार asScala रूपांतरण उपलब्ध कराने के लिए पर्याप्त है।

2
Andrey Tyukin 16 अप्रैल 2018, 01:45