UnmodifiableRandomAccessList异常将集合从Java转换为Scala

时间:2018-04-15 22:27:37

标签: scala

我在Scala代码中调用了Java函数:

 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 个答案:

答案 0 :(得分:2)

您猜错了类型,并获得了类强制转换异常。 只需在data final2; set tst; by ssn acct_num descending yymm; firstSSN = first.ssn; lastSSN = last.ssn; firstACCT = first.acct_num; lastACCT = last.acct_num; firstYYMM = first.yymm; lastYYMM = last.yymm; run; proc print data = final2; title "Final Data Set Illustrating First. and Last. Variables"; run; 中使用限制较少的类型:

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转换可用。