在java中使用scala vararg方法
为什么所有从java使用的scala vararg方法似乎都接受一系列变量,而不能用作java本机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):_*) 因此,这可以避免集
例如,
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方法,因为您仍然在回答与所问问题不同的问题。有关更多详细信息,请参阅有关更多详细信息,请参阅