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.

  • ¿El comstackdor de Kotlin siempre conserva los nombres de los parameters en bytecode?
  • ¿Cómo obtengo el valor de una propiedad con reflection?
  • Kotlin comtesting si la function requiere parámetro de instancia
  • Crear una nueva instancia de una KClass
  • ¿Puedo usar kotlin.reflect para get un valor de un campo
  • La igualdad de class Kotlin falla
  • java.lang.IllegalArgumentException: Callable espera 4 arguments, pero se proporcionaron 3
  • ¿Cómo get los nombres de los parameters a través de la reflexión en kotlin?
  • ¿Cómo puedo get una reference a un object Kotlin por su nombre?
  • Kotlin: doble operador de colon (reflexión) sobre
  • Usar reflexión para pasar y modificar una primitiva sin usar matriz