如何使用Java代码中的Scala varargs
有很多关于从Scala代码调用Java varargs的文章,但我能找到的唯一相反的方法是这个问题:Using scala vararg methods in java,它没有任何具体的例子
我试图使用一些Java代码中的scala.Console
,因为java.io.Console
在Eclipse中不起作用,而Scala代码起作用。但我不知道该怎么做
def readLine (text: String, args: Any*): String
因为它似乎期望第二个参数为scala.collection.Seq[Any]
,而我不知道如何在Java中创建Seq
。我怎样才能解决这个问题
我尝试过的事情:
1)使用null
// Java
String s = scala.Console.readLine("Enter text: ", null);
-获得NullPointerException
奖励
2)用scala.collection.Seq.empty()
替换null
,但是javac报告了各种错误,比如Seq
没有empty
方法
3)在scala.collection.immutable
包对象中使用Nil
对象,但语法建议使用here,即scala.collection.immutable.package$Nil$.MODULE$
,但无法解决
当然,我可以使用不接受varargs的readLine()
方法,但那太简单了
# 1 楼答案
您可以使用:
从Java代码创建一个空序列。否则,您可以使用:
创建一个空的数组缓冲区,然后向其中添加元素,并将其用作Scala vararg方法的参数
否则,如果您使用希望从Java代码中使用的vararg方法设计Scala库,则使用
varargs
注释。它将生成一个Java版本的方法,该方法采用数组而不是Seq
上面,反射显示有两个版本的方法
foo
生成——一个采用Seq[Int]
,另一个采用int[]