我在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
为什么会发生这种情况以及如何解决这个问题?
答案 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
转换可用。