Manera idiomática de invocar methods a través de la reflexión en Kotlin

Tengo un fragment del código de Kotlin que intenta invocar de manera reflexiva un método que usa el package Reflection de Java:

val arguments = arrayOfNulls<Any>(numberOfParams) // Populate arguments try { fooMethod.invoke(fooClass, arguments) } catch (e: Exception) { // Panic } 

Sigue fallando con una exception IllegalArgumentException de "número incorrecto de parameters".

Leí algo sobre el tema y parece que el operador de difusión del método invoke() se niega a descomprimir Array<Any> porque no es equivalente a Object[] . Podría intentar usar un Object[] estándar de Java, pero me pregunto, ¿es esta la única manera? ¿Es la mejor manera? ¿Hay alguna manera de que pueda hacer esto con los types de Kotlin?

¿Cuál es la forma más idónea de lograr lo que quiero en Kotlin?

Debe agregar el operador de extensión * a su llamada:

 fooMethod.invoke(fooClass, *arguments) 

El uso de arguments sin prefijarlo con * causará que una nueva matriz de longitud 1 contenga arguments como su único elemento que se creará y pasará como arguments para invoke . Prefijándolo con el operador de propagación hace que la matriz de arguments se pase para invoke como arguments .

Consulte Número variable de arguments (Varargs) – Funciones – Idioma de progtwigción de Kotlin para get más detalles.

  • Obteniendo la class actual
  • ¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?
  • ¿Cómo get una class de time de ejecución de una variable en Kotlin?
  • Kotlin comtesting si la function requiere parámetro de instancia
  • ¿Puedo usar kotlin.reflect para get un valor de un campo
  • Reflexión de KFlin KFunction - get valores de parameters
  • ¿Cómo obtengo las funciones declaradas de una class Kotlin (KClass en M12)?
  • Kotlin: comparar los valores de propiedad de diferentes objects objective con (fuera) reflexión
  • ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
  • La delegación de propiedad kotlin alias lanza Exception
  • Obtén la function por nombre dinámicamente en Kotlin