标题问这个问题。基本上我正在使用一个Java库,它将一个String ...作为参数。我如何在我的Scala代码中调用它?请告诉我相当于字符串...斯卡拉
我将添加更多一点:从Scala代码
def myScalaFunc(params:String*) {
val myJavaClass = new JavaClass()
myJavaClass(params)
}
标题问这个问题。基本上我正在使用一个Java库,它将一个String ...作为参数。我如何在我的Scala代码中调用它?请告诉我相当于字符串...斯卡拉
我将添加更多一点:从Scala代码
def myScalaFunc(params:String*) {
val myJavaClass = new JavaClass()
myJavaClass(params)
}
您必须将params
扩展到一系列的参数,而不仅仅是一个单一的集合参数。最简单的方法是说params: _*
。
如果Java看起来像:
public class VarargTest {
public void javaFunc(String... args) {
// something
}
}
然后Scala的呼叫者的样子:
def scalaFunc(params: String*) =
(new VarargTest).javaFunc(params: _*)
@chiappone这个答案提供了解决您的问题,但你应该明白_why_你的代码是行不通的,因为,直观地,人们可能会认为它_would_工作!看,当你调用'scalaFunc',当然,你传递的参数把它解释为字符串的可变参数,但是一旦你_inside of_'scalaFunc','params'实际上被认为是一个' SEQ [字符串]'。 _However_,如果你需要将任何类型的Seq'的'成可变参数,':_ *'是这样做的永远那么甜美语法糖,而这正是DHG是用人这里调用'javaFunc '。 – Destin 2012-03-21 19:48:13
在Java中,这是用于接收可变数量的参数的方法的语法:
void method(String... param)
在斯卡拉,等效的语法是这样的:
def method (param:String*)
是啊,但签名似乎不匹配时,我尝试做myJavaMethod(PARAM),其中一个参数是一个字符串* – chiappone 2012-03-21 19:13:12
@chiappone见我的评论上面,如果param被定义为字符串*然后使用序列扩展语法来调用myJava方法与它。 – 2012-03-21 19:16:09
如果方法定义:使用这个特殊的语法
method("String 1", "String 2")
或扩展序列:
method(Seq("String 1", "String 2"): _*)
鉴于
void method(String... param)
然后呼叫它像这样你的示例代码(我假设我的编辑是正确的):
myJavaClass.myJavaMethod(params: _*)
是可变参数的问题? – 2012-03-21 19:07:23