La delegación de propiedad kotlin alias lanza Exception
Quiero agregar propiedad de alias a alguna class en kotlin que solo se delegan a algunas properties existentes
luego invento un método llamado alias para hacerlo, lo que desafortunadamente resulta en una exception
- ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?
- Llamadas a function de logging usando reflexión en kotlin
- Acceda al tipo de delegado de Kotlin sin una instancia
- ¿Cómo uso el object Kotlin por reflexión?
- Kotlin: ¿Cómo puedo usar la reflexión en los packages?
val <T> Array<T>.length by alias(Array<T>::size) val <T> Collection<T>.length by alias(Collection<T>::size) fun <R, T> alias(alias: KProperty1<R, T>) = object : ReadOnlyProperty<R, T> { override operator fun getValue(thisRef: R, property: KProperty<*>): T { return alias.get(thisRef) } }
siguiendo la stack de exception
java.lang.NoSuchMethodError: [Ljava.lang.Object;.getSize()I at kt.ruby.ArrayKt$length$2.get(Array.kt:34) at kt.ruby.ArrayKt$alias$1.getValue(Array.kt:40) at kt.ruby.ArrayKt.getLength(Array.kt)
- ¿Cómo puedo get una reference a un object Kotlin por su nombre?
- ¿Cómo hacer inferencia tipo Kotlin desde la reflexión KClass?
- Interoperabilidad de reflexión de Kotlin con Java
- Kotlin comtesting si la function requiere parámetro de instancia
- Crear una nueva instancia de una KClass
- Kotlin language obtiene class en time de ejecución
- ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
- ¿Cómo get una KClass de Array?
Parece ser un error. El siguiente progtwig también falla:
fun main(args: Array<String>) { val a: KProperty1<Array<String>, Int> = Array<String>::size a.get(args) }
El problema aquí es que KProperty1<Array<String>>
generado KProperty1<Array<String>>
reference a getSize()
lugar de length
en Object[]
.
final class MainKt$main$a$1 extends PropertyReference1 { public static final KProperty1 INSTANCE = new MainKt$main$a$1(); public String getName() { return "size"; } public String getSignature() { return "getSize()I"; } public KDeclarationContainer getOwner() { return Reflection.getOrCreateKotlinClass(Object[].class); } @Nullable public Object get(@Nullable Object receiver) { return Integer.valueOf(((String[])receiver).getSize()); } }
Ver KT-15618 para esto.
- El selector común Kotlin anko no funciona como en los ejemplos proporcionados
- Iterar valores enum usando values () y valueOf en kotlin