无法解析在扩展函数中提供给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] 

为什么会发生?

2 Solutions collect form web for “无法解析在扩展函数中提供给vararg参数的字符串”

使用展开运算符:

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

  • 如何在类文件中放置Kotlin扩展?
  • 如何在Kotlin中将Java静态方法添加到Java类中
  • 如何检查kotlin中的“instanceof”类?
  • Kotlin - 延期上课
  • kotlin是function性的还是程序性的?
  • Kotlin-扩展功能和平台类型?
  • 如何用toString扩展一个数据类
  • 意外的令牌(使用;在同一行上分隔表达式)
  • 在kotlin中,如何返回由泛型类参数定义的实例
  • findViewById ClassCastExcpetion
  • Kotlins扩展方法Stream.toList()丢失
  • Kotlin language will be the best programming language for Android.