从Java调用可变长度参数Scala函数的语法?

时间:2014-09-08 20:20:56

标签: java scala cross-language variadic-functions

我有一个Scala类,其构造函数采用可变长度参数列表。

case class ItemChain(items: Item*)

从Scala可以这样调用

ItemChain(Item(), Item())

我无法弄清楚从Java调用它的语法。如果我这样做

new ItemChain(new Item(), new Item())

我收到编译错误,指出此行与签名scala.collection.seq<Item>不匹配。

我可以直接从Java实例化Scala序列对象。

new scala.collection.Seq<Item>()

但我无法弄清楚如何随后添加我的两个Item实例。如果我创建List的{​​{1}}并将其强制转换为Item,我会收到运行时错误。

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

import static scala.collection.JavaConverters.asScalaBufferConverter;
import static java.util.Arrays.asList;

...

new ItemChain(asScalaBufferConverter(asList(new Item(), new Item())).asScala());