No se puede resolver la cadena suministrada al parámetro vararg en la function de extensión

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()) 

La tostada con el siguiente text muestra:

 Showing your number: [Ljava.lang.String;@2cfa3b] 

¿Por qué sucede esto?

Use el operador de propagación :

 fun Activity.showToast(textResId: Int, vararg formatArgs: String) { val text = getString(textResId, *formatArgs) Toast.makeText(this, text, Toast.LENGTH_SHORT).show() } 

Actualmente, está pasando una matriz como argumento de formatting. Al usar el operador de difusión, pasa los contenidos de la matriz como el argumento de formatting.

Debe usar el operador de propagación para pasar los varargs a la function getString :

 val text = getString(textResId, *formatArgs) 

Esto se debe a que el tipo de formatArgs dentro de la function showToast es Array<String> (no hay vararg tipo vararg o algo así), y si lo vararg sin * , solo pasará un único parámetro, que será el matriz en lugar de su contenido.

  • ¿Cómo crear una class estática en Kotlin?
  • Acceso a la function de extensión de Kotlin Campo privado de Java
  • esta reference en un inicializador perezoso de la propiedad de extensión kotlin
  • Los generics de Kotlin esperan un tipo inesperado
  • Modificar "esto" en la function de extensión
  • Función genérica de extensión de Kotlin con types básicos sin API de reflexión
  • Función de extensión booleana
  • Función de queue Kotlin List
  • Métodos de interfaz de anulación de Android kotlin dentro del método onCreateView ()
  • acceso al método de extensión kotlin en otro kt
  • ¿Por qué Kotlin no me deja usar la extensión writeText?