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

  • 扩展函数不会创建新的Observable对象
  • 扩展MockitovalidationKotlin不工作(以“kotlin方式”)
  • kotlin:扩展方法和null接收者
  • Kotlin:如何在事务类的上下文中运行服务方法?
  • Android Kotlin Extension超级通话
  • Kotlins扩展方法Stream.toList()丢失
  • 如何在Kotlin中创建一个静态类?
  • Android工作室插件ID:'kotlin-android-extensions'
  • Kotlin扩展函数突然需要api等级24
  • Kotlin-扩展功能和平台类型?
  • Kotlin扩展冲突
  • Kotlin language will be the best programming language for Android.