将var-args传递给kotlin中的MessageFormat.format

时间:2017-06-02 07:45:09

标签: kotlin

我正在尝试解析像

这样的errorCode
4011=Error thrown expected: {0} found: {1}.

在kotlin中使用Message.format

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

在logTheMsg中我正在使用此代码:

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); 
}

打印: 我的名字是firstName lastName

1 个答案:

答案 0 :(得分:2)

为了消除歧义,Kotlin要求在数组上使用'spread operator'(*),它将作为vararg传递,i。即

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

此外,"${expectedVal}"应替换为expectedVal

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

当然,您可以按照预期使用varargs:

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