Articles of reflexión de

Cómo acceder a los attributes / methods en el parámetro de class genérico

Nuevo para Kotlin viniendo de C #. Estoy intentando crear una class que incluya un object de class intercambiable a través de generics. En la class, me gustaría acceder a valores de attributes y methods de llamada en la class. Supongo que esto tiene que ser a través de algún tipo de mecanismo de reflexión. […]

¿Cómo iterar a través de los attributes de un JsonObject recursivamente?

Estoy parsing cadenas en objects JSON, y necesito poder iterar recursivamente a través de los attributes de los objects. Así que estoy tratando de crear una function que itere a través de los attributes del object, y si un atributo no es primitivo, llame de nuevo a la function (recursion) con el atributo mismo. En […]

Reflexión de kotlin para el método de Java que acepta una matriz de class nula

Tengo un código de Java como este: Method m = device.getClass() .getMethod("removeBondNative", (Class[]) null); m.invoke(device, (Object[]) null); y estoy tratando de escribir lo mismo en Kotlin de esta manera: device.javaClass.getMethod("removeBondNative", null as Class<*>).invoke(device, null as Any) pero recibo este post de error: Process: com.example.zemcd.toofxchange, PID: 17466 kotlin.TypeCastException: null cannot be cast to non-null type java.lang.Class<*> […]

Método de llamada en class genérica a través de la reflexión

Estoy intentando configurar una function tomando una class genérica que a su vez llama un método dentro de esa class a través de la reflexión. A continuación, comstack el código, sin embargo, cuando lo ejecuto, aparece este error: java.lang.IllegalArgumentException: Callable expects 2 arguments, but 1 were provided. ¿Por qué Kotlin afirma que debería haber 2 […]

El parámetro de tipo Force es invariante en el sitio de uso cuando es covariante en el sitio de statement

Estoy construyendo una function de extensión en KProperty1 . La function necesita aceptar un argumento que amplíe el tipo de valor de la propiedad ( R ), aunque KProperty1 sea ​​covariante en el parámetro de tipo R Un ejemplo ligeramente artificial sería el siguiente, aunque mi uso es más legítimo. data class Data(val value: String) […]

Los generics en KProperty1.getDelegate ¿son demasiado restrictivos?

Estoy tratando de get todos los delegates de properties de un cierto tipo en una jerarquía de classs. Esto me está presentando algunos problemas. Para empezar, no parece haber una forma directa de get una superclass de class en Kotlin. La primera forma en que lo intenté fue usar Class.getSuperclass de Java: private fun <T […]

Kotlin: Cantidades masivas de ConsPStack, ¿cómo puedo evitar?

¿Cómo puedo evitar la cantidad masiva de ConsPStack que crea mi aplicación? ¿Cuándo se crean estos? Mi aplicación: https://github.com/Jire/Abendigo

¿Cómo pasar un parámetro de tipo a una reference genérica de constructor de class?

Supongamos el siguiente código: class ConstructMe<T> {} data class Test<T> constructor(var supplier: () -> ConstructMe<T>) {} fun main(args: Array<String>) { works<Int>() breaks<Int>() } fun <T> works() { Test<T>({ ConstructMe<T>() }) // (1) any one class type parameter can be removed like: Test({ ConstructMe<T>() }) // (2) still works (class type infernetworking by argument type) Test<T>({ […]

Llamar al constructor de la class por reflexión con Kotlin

Tengo la siguiente class de datos data class Person (val id: Int? = null, val name: String, val active: Boolean) Necesito llamarlo constructor por reflexión. Probé el siguiente código private fun <T> createEntity(constructor: Constructor<*>, vararg args: T) : Any { return constructor.newInstance(args) } y llámalo con una matriz para el parámetro args . val fields […]

Kotlin: generics, reflexión y la diferencia entre tipo T y T: cualquier

Si bash acceder al javaClass de un tipo genérico T, el comstackdor de Kotlin se queja de que T no es un subtipo de kotlin.Any class Foo<T> (val t: T ){ val cls = t.javaClass // Error, T is not a subtype of kotlin.Any } Si define T como un subtipo de Cualquiera todo funciona […]