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