我有一个调用Scala方法的Java代码。
Java端代码:
List<String> contexts = Arrays.asList(initialContext);
ContextMessage c = ContextMessage.load(contexts);
Scala边码:
def load(contexts: List[String]) = ...
contexts foreach context =>
在这种情况下,我有scala.collection.immutable.List<String> cannot be applied ...
错误消息。
我还需要使上下文的类型尽可能通用(即Seq),因为load方法迭代给定的集合对象以处理某些事物。
def load(contexts: Seq[String]) = ...
如何解决这两个问题?
答案 0 :(得分:1)
我只会使用JavaConversions
并保留我的Scala代码 scalatic 。
// Scala code
object ContextMessage {
def load(contexts: Seq[String]) = ???
}
// in your Java code
ContextMessage c = ContextMessage.load(JavaConversions.asScalaBuffer(Arrays.asList(initialContext));
答案 1 :(得分:0)
在Scala调用此方法的情况下,java.util.ArrayList和Seq类型之间的隐式转换可以轻松解决此问题。
import scala.collection.mutable.ListBuffer
object ContextMessage extends App {
implicit def typeConversion(input: java.util.ArrayList[String]) = {
val res : ListBuffer[String] = new ListBuffer[String]()
for (i <- 0 to input.size - 1) {
// println(input.get(i))
res += input.get(i)
}
res
}
def load(contexts: Seq[String]) = {
contexts foreach { c =>
println(c)
}
}
val x = new java.util.ArrayList[String]()
x.add("A")
x.add("B")
load(x)
}
ContextMessage.main(args)
结果显示:
A
B