Android和Kotlin varargs:格式化的字符串返回垃圾

jac*_*ast 5 resources android kotlin

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

protected fun string(@StringRes stringRes: Int, vararg args: String): String = app.getString(stringRes, args) 
Run Code Online (Sandbox Code Playgroud)

直到现在,当我添加varargs以检索格式化的字符串时,它的工作情况都很好。简单的字符串仍然可以正常工作,但是当我尝试检索格式化的字符串时:

string(R.string.formatted_string, myId)
Run Code Online (Sandbox Code Playgroud)

我的字符串资源:

<string name="formatted_string">#%s</string>
Run Code Online (Sandbox Code Playgroud)

我得到一些垃圾:

#[Ljava.lang.String;@3a59711
Run Code Online (Sandbox Code Playgroud)

预期:

#4848684
Run Code Online (Sandbox Code Playgroud)

我请求的资源的垃圾更改

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

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

这是怎么回事

Ser*_*gey 7

您的解决方案是使用传播运算符 *

fun string(@StringRes stringRes: Int, vararg args: String): String = getString(stringRes, *args)
Run Code Online (Sandbox Code Playgroud)

可变数量的参数(变量)