我有绳子
<string name="data">%1$s / %2$s</string>
Run Code Online (Sandbox Code Playgroud)
我在函数中传递可变参数
fun getText(varargs text: String) : String {
return getString(R.string.data,text)
}
Run Code Online (Sandbox Code Playgroud)
我在活动中调用了函数
getText("1" ,"2")
Run Code Online (Sandbox Code Playgroud)
它给出了错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.vivek, PID: 5126
java.util.MissingFormatArgumentException: Format specifier '%2$s'
at java.util.Formatter.format(Formatter.java:2529)
at java.util.Formatter.format(Formatter.java:2459)
at java.lang.String.format(String.java:2911)
Run Code Online (Sandbox Code Playgroud)
接受的答案实际上并没有解决问题,所以我不太确定为什么它被接受。
String.format使用,Context.getString或Fragment.getString或并不重要Resources.getString。问题在于如何varargs解释论证。看起来像 Kotlin 的东西。简而言之,它将整个varargs作为一个数组,就像它是一个单个对象一样,并将其作为参数之一传递给您varargs在函数中调用的函数。
因此,为了让 Kotlin 不这样做,你只需要用星号(所谓的 Spread 运算符)来扩展参数,如下所示:varargs
fun getText(varargs text: String) : String {
return getString(R.string.data, *text)
}
Run Code Online (Sandbox Code Playgroud)
这是经过测试的解决方案。
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |