kotlin别名属性代表抛出异常

我想将别名属性添加到kotlin中的一些类,这些类只是将自己委托给一些已有的属性

那么我发明了一个名为别名的方法来做到这一点,不幸的是会导致一个异常

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

在异常堆栈之后

 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) 

这似乎是一个错误。 以下程序也崩溃:

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

这里的问题是,生成的KProperty1<Array<String>>Object[]上引用getSize()而不是length

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

请参阅KT-15618 。