Android 和 Kotlin 可变参数:格式化字符串 returns 垃圾

Android and Kotlin varargs: formatted strings returns garbage

我遇到了一个奇怪的问题:我有一个用于检索资源字符串的通用函数(只是为了避免每次都写 context.resources.getString()):

protected fun string(@StringRes stringRes: Int, vararg args: String): String = app.getString(stringRes, args) 

直到现在我添加可变参数来检索格式化字符串时工作正常。简单的字符串仍然可以正常工作,但是当我尝试检索格式化的字符串时:

string(R.string.formatted_string, myId)

我的字符串资源:

<string name="formatted_string">#%s</string>

我得到了一些垃圾:

#[Ljava.lang.String;@3a59711

预计:

#4848684

我请求的资源的垃圾变化

它看起来是一个对象标识符。

如果我不使用该方法,它工作正常

这里发生了什么?

您的解决方案是使用 展开运算符 *:

fun string(@StringRes stringRes: Int, vararg args: String): String = getString(stringRes, *args)

Variable number of arguments (Varargs)