2017-06-02 46 views
0

我試圖解析的errorCode像科特林使用Message.format通過VAR-args設置爲在科特林

loggingService.logTheMsg("4011", arrayOf("${expectedVal}", "${actualVal}")) 

在logTheMsg我使用此代碼

4011=Error thrown expected: {0} found: {1}. 

MessageFormat.format:

var errorMessage = props.getProperty(errorCode) 
errorMessage = MessageFormat.format(errorMessage as String, args) 
println("${errorMessage}.") 

但得到輸出:

Error thrown expected:[Ljava.lang.String;@38f3b4ba found: {1}. 

它可能在回答幫助,同樣的事情在Java這樣實現的:

parse(value, new String[]{"firstName","lastName"}); 

而在解析:

parse(String value, String[]args) {   
    value = MessageFormat.format((String) value, args);   
    System.out.println(value); 
} 

打印: 我的名字是名姓

+0

哪裏是可變參數部分?在你的java版本和kotlin版本中都沒有可變參數。 – glee8e

回答

1

爲了消除模糊性,Kotlin要求數組中的'spread operator'(*)作爲可變參數i傳遞。即

loggingService.logTheMsg("4011", *arrayOf("${expectedVal}", "${actualVal}")) 

而且,"${expectedVal}"expectedVal更換:

loggingService.logTheMsg("4011", *arrayOf(expectedVal, actualVal)) 

,當然,你可以使用可變參數,因爲他們打算使用:

loggingService.logTheMsg("4011", expectedVal, actualVal) 
+0

並在另一邊使用相同的傳播運算符,對,這樣我發現它的工作原理,也使用可變參數:字符串?在方法param中,然後* args – niranjan