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

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) 

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.

  • ¿Cómo puedo get el nombre de una propiedad de Kotlin?
  • ¿Puedo get una KFunction de una variable del tipo de function en Kotlin?
  • Quiero detectar si una class JVM es una class Kotlin o no
  • ¿Cómo uso el object Kotlin por reflexión?
  • ¿Cómo get los nombres de los parameters a través de la reflexión en kotlin?
  • instancia :: class.java vs. instance.javaClass
  • ¿Cómo cambiar un campo de miembro con la reflexión de Kotlin?
  • ¿Cómo obtengo el valor de una propiedad con reflection?
  • ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?
  • java.lang.IllegalArgumentException: Callable espera 4 arguments, pero se proporcionaron 3
  • Kotlin obtiene la anotación de campo siempre vacía