在java中使用scala vararg方法

F0R*_*0RR 10 scala scala-java-interop scala-collections

为什么所有scala vararg方法,当从java中使用时,似乎接受Seq变量,并且不能用作java本机vararg方法.这是一个错误吗?

例如,Buffer有方法def append(elems: A*): Unit.但在java中它有另一个签名:void append(Seq<A>).

lmm*_*lmm 17

如果您控制scala代码,则可以使用@varargs使其生成与java兼容的varags方法,例如 @varargs def append(elems: A*): Unit = {}


Rex*_*err 8

这不是一个bug.它是一种设计选择,有利于在Scala中使用vararg与Java的互操作性.例如,它允许您将List一个Scala varargs方法传递给它,而不必将其转换Array为路径.

如果你需要使用Java中的Scala varargs,你应该创建一些scala Seq.例如,您可以编写Java包装器以获取自动创建的数组,然后使用genericWrapArrayPredef对象中的方法.