无法解析在扩展函数中提供给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类型或类似的东西),并且如果在没有*情况下传递它,那么只会传递一个参数,数组而不是其内容。