Reflection kotlin别名属性委派引发异常

Reflection kotlin别名属性委派引发异常,reflection,properties,delegates,kotlin,Reflection,Properties,Delegates,Kotlin,我想将Alias属性添加到kotlin中的某个类中,该类只是将自己委托给一些现有属性 然后我发明了一个名为alias的方法来实现这一点,不幸的是,这导致了一个异常 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属性添加到kotlin中的某个类中,该类只是将自己委托给一些现有属性

然后我发明了一个名为alias的方法来实现这一点,不幸的是,这导致了一个异常

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)
    }
}

这似乎是一只虫子。以下程序也会崩溃:

fun main(args: Array<String>) {
    val a: KProperty1<Array<String>, Int> = Array<String>::size
    a.get(args)
}

有关详细信息,请参见。

注意,仅对
Array.length
引发异常,而不对
Collection.length
@nhaarman nice hint引发异常
fun main(args: Array<String>) {
    val a: KProperty1<Array<String>, Int> = Array<String>::size
    a.get(args)
}
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());
   }
}