標題問這個問題。基本上我正在使用一個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