Articles of reflexión

Reflexión de KFlin KFunction – get valores de parameters

Para crear una anotación simple que registre las llamadas a funciones, estoy tratando de get los siguientes attributes de una function que tiene dicha anotación: Nombre de la function Nombres de parameters Valores paramétricos Lo que tengo hasta ahora usa KCallable como valor, lo que hace que agarrar el nombre y los nombres de la […]

¿Cómo obtengo una KProperty1 de una KProperty0?

En mi API, he invalidado la invocación en KProperty0 para realizar ciertas acciones y proporciono una instancia para get estas properties: api { instance::property1 { /* Do stuff */ } } Pero en lugar de KProperty0 necesito el KProperty1 correspondiente. Actualmente busco la propiedad de la class con el mismo nombre que KProperty0 . operator […]

¿Cómo get la reference de class de KParameter en kotlin?

El código a continuación es sobre reflexión. Intenta hacer 2 cosas: case1() crea una instancia de la class SimpleStudent , funciona. case2() crea una instancia de Student class Student , no funciona. La razón por la cual el case2() no funciona tan bien como la pregunta, es que dentro de ese generateValue() : No sé […]

El operador de Kotlin Reflection obtiene la implementación

Estoy aprendiendo Kotlin, actual usando Fedora 25 OpenJDK 8 y Kotlin 1.1. Copié el ejemplo del website de Kotlin: https://kotlinlang.org/docs/reference/delegated-properties.html y cambié el operador get. class Example { var p: String by Delegate() } class Delegate { operator fun getValue(thisRef: Any?, property: KProperty<*>): String { // My implementation return property.getter.call(thisRef) as String } operator fun […]

Kotlin, cómo recuperar el valor del campo a través de la reflexión

Así que tengo cientos de campos en un par de classs y me gustaría escribirles algunos methods donde println automáticamente cada campo y su valor correspondiente Por el momento tengo esto: inner class Version(val profile: Profile) { @JvmField val MINOR_VERSION = glGetInteger(GL_MINOR_VERSION) fun write(file: File? = null) { //file.printWriter().use { out -> out.pri } this::class.java.fields.forEach […]

¿Cómo obtengo el valor de una propiedad con reflection?

Quiero usar los valores de todas las properties que tienen alguna anotación. En general, mi código funciona, obtengo todas las properties y solo tomo aquellas que tienen esa anotación. private inline fun <reified A : Annotation> (target: Any) { target::class.memberProperties .filter { it.annotations.any { annotation -> annotation is A } } .forEach { // How […]

Verificar si la function es extensión

Dada una function KFunction ¿cómo puedo verificar si se trata de una function de extensión? La única forma que conozco es verificar si function.extensionReceiverParameter devuelve null . ¿Hay alguna otra o una forma recomendada?

Kotlin: isAssignableFrom y reflexiones del tipo de reflexión

En Kotlin (1.0.6), a través de la reflexión necesito iterar sobre los miembros de una class (llamémoslo Foo ) y hacer algo basado en el tipo de devolución. Puedo escribir lo siguiente, que funciona: Foo::class.members{ m -> if(Integer.TYPE.isAssignableFrom(m.returnType.javaType as Class<*>)){ //do something here } else if … } el problema es que la sentencia if […]

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 […]

¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?

En el siguiente código, tengo problemas para organizar la input / salida correctamente de modo que tanto desde () como a () funcionen como se esperaba. Intenté conectar / desconectar tanto las properties como los parameters de la function, pero siempre termino con errores de tipeo incorrectos. class KStateMachine(private val states: List<StateHandler>) { var currentState: […]