无法解析在扩展函数中提供给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]
为什么会发生?
- Android库,Kotlin和Dagger2
- 未解决的参考:使用greendao和kotlin的DaoSession
- 为什么Kotlin允许在不同的文件夹(例如main和androidTest)中有两个具有相同名称和包的类?
- 智能投到BootsrapButton是不可能的,因为endtrip是这个时候改变了的可变属性
- 我怎样才能代表与Android室的多对多关系?
使用展开运算符:
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
类型或类似的东西),并且如果在没有*
情况下传递它,那么只会传递一个参数,数组而不是其内容。