无法解析在扩展函数中提供给vararg参数的字符串
strings.xml中
<string name="my_string">Showing your number: %1$s</string>
ActivityExt.kt
fun Activity.showToast(textResId: Int, vararg formatArgs: String) { val text = getString(textResId, formatArgs) Toast.makeText(this, text, Toast.LENGTH_SHORT).show() }
MainActivity.kt
val number = 11 showToast(R.string.my_string, number.toString())
吐司与以下文字显示:
Showing your number: [Ljava.lang.String;@2cfa3b]
为什么会发生?
使用展开运算符:
fun Activity.showToast(textResId: Int, vararg formatArgs: String) { val text = getString(textResId, *formatArgs) Toast.makeText(this, text, Toast.LENGTH_SHORT).show() }
目前,你正在传递一个数组作为格式参数。 通过使用spread运算符,您可以将数组的内容作为格式参数传递。
您应该使用spread运算符将可变参数传递给getString
函数:
val text = getString(textResId, *formatArgs)
这是因为showToast
函数中的formatArgs
的类型是Array<String>
(没有vararg
类型或类似的东西),并且如果在没有*
情况下传递它,那么只会传递一个参数,数组而不是其内容。