在java中使用scala vararg方法

在java中使用scala vararg方法,scala,scala-collections,scala-java-interop,Scala,Scala Collections,Scala Java Interop,为什么所有从java使用的scala vararg方法似乎都接受一系列变量,而不能用作java本机vararg方法。这是虫子吗 例如,Buffer具有方法def append(elems:A*):Unit。但在java中,它还有另一个签名:void append(Seq)您可以使用:*在varargs中轻松地强制转换Seq。例如: val b = collection.mutable.ListBuffer.empty[Int] b.append(List(1, 2):_*) 因此,这可以避免集

为什么所有从java使用的scala vararg方法似乎都接受一系列变量,而不能用作java本机vararg方法。这是虫子吗


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

您可以使用
:*
在varargs中轻松地强制转换
Seq
。例如:

val b = collection.mutable.ListBuffer.empty[Int]
b.append(List(1, 2):_*)
因此,这可以避免集合API中的代码重复

您也可以简单地使用
appendAll

b.appendAll((List(1, 2))

您可以使用
:*
在varargs中轻松地强制转换
Seq
。例如:

val b = collection.mutable.ListBuffer.empty[Int]
b.append(List(1, 2):_*)
因此,这可以避免集合API中的代码重复

您也可以简单地使用
appendAll

b.appendAll((List(1, 2))

这不是一个错误。这是一种设计选择,它支持在Scala中使用vararg,而不是与Java的互操作性。例如,它允许您将
列表
传递到Scala varargs方法中,而不必在途中将其转换为
数组


如果需要使用Java中的Scala varargs,则应该创建一些Scala Seq。例如,您可以编写一个Java包装器来自动创建一个数组,然后使用
Predef
对象中的
genericWrapArray
方法。

这不是一个bug。这是一种设计选择,它支持在Scala中使用vararg,而不是与Java的互操作性。例如,它允许您将
列表
传递到Scala varargs方法中,而不必在途中将其转换为
数组


如果需要使用Java中的Scala varargs,则应该创建一些Scala Seq。例如,您可以编写一个Java包装器以获得自动创建的数组,然后从
Predef
对象使用
genericWrapArray
方法。

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

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

嗯,是的,我可以,但这如何回答我的问题呢?)我刚刚修改了我的答案。问题不是Seq不能在scala中转换为varargs。问题是,我必须在Java中创建一个Seq来使用带有varargs的方法。由于您仍然在回答一个与所问问题不同的问题,因此被否决。嗯,是的,我可以,但这如何回答我的问题?)我刚刚修改了我的答案。问题不是Seq不能在scala中转换为varargs。问题是我必须在Java中创建一个Seq来使用varargs.Downvoted方法,因为您仍然在回答与所问问题不同的问题。有关更多详细信息,请参阅有关更多详细信息,请参阅