Kotlin comtesting si la function requiere parámetro de instancia

Si se crea un KCallable utilizando Any()::toString , cuando se haga reference a él más adelante no es necesario pasar esa instancia Any (cuando se usa la call ).

Aunque si se crea utilizando Any::toString (no es una instancia de Any ), se requiere pasar una instancia Any .

Entonces mi pregunta es ¿cómo puedo averiguar fácilmente si necesito pasar ese parámetro de instancia y este parámetro es obligatorio?

Encontré una manera de hacer esto:

callable.parameters[0].kind == KParameter.Kind.INSTANCE

pero no es muy agradable y me pregunto si hay una manera más fácil o recomendada de resolver esto. ¡Gracias!

Una mejora del método sugerido es verificar la propiedad instanceParameter : si no es nula, el invocable espera una instancia:

 val isInstanceCallable = callable.instanceParameter != null 

Además, las funciones de extensión como fun Any.foo() = ... tendrán nulo en el fun Any.foo() = ... instanceParameter , y es probable que también desee verificar el fun Any.foo() = ... extensionReceiverParameter .


Además, si solo necesita trabajar con references invocables, puede verificar si tienen un receptor vinculado (es decir, la instancia a la que está vinculado). Use la propiedad boundReceiver :

 val instance = (callable as CallableReference).boundReceiver 

Cuando una reference invocable está desatada, devolverá un valor especial CallableReference.NO_RECEIVER , por lo tanto, solo tiene que comparar el valor devuelto con él:

 val bound = (callable as CallableReference).boundReceiver != CallableReference.NO_RECEIVER 

(Ejemplo ejecutable)

  • Reflexión de Kotlin: compruebe si la propiedad tiene tipo
  • Kotlin: doble operador de colon (reflexión) sobre
  • Crear una nueva instancia de una KClass
  • ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
  • ¿Cómo obtengo una KProperty1 de una KProperty0?
  • Kotlin invoke getter / setter reflexivamente
  • Kotlin, cómo recuperar el valor del campo a través de la reflexión
  • ¿Cómo obtengo el valor de una propiedad con reflection?
  • Kotlin language obtiene class en time de ejecución
  • Cómo acceder a los objects-miembros de una statement de object en kotlin
  • ¿Hay alguna manera de identificar una class de datos Kotlin de una class regular de Kotlin?