Articles of reflexión

Llamadas a function de logging usando reflexión en kotlin

Estoy escribiendo una aplicación en Kotlin y me encantaría poder registrar todas las llamadas de function sin tener que pasar el nombre de la function a una llamada de logging como una cadena. fun myFunction() { log() // Would love to be able to do just this without any args // Content of myFunction here […]

Determinar si una instancia es una instancia de una class de datos

Dadas las siguientes classs abstract class SomeAbstractClass { abstract val name: String } data class DataClass( override val name: String ) : SomeAbstractClass() class NoDataClass( override val name: String ) : SomeAbstractClass() Para cualquier instancia de SomeAbstractClass , ¿puedo determinar si se trata de una class de datos sin depender de la verificación de types? […]

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