在未知(任意)对象上调用kclass.memberProperties是否安全?

时间:2016-03-31 13:41:53

标签: reflection kotlin

我认为只访问members对象的KClass字段即可。但是,我找到了一个案例,但事实并非如此。两个测试都抛出异常。

@Test fun mapProperties() {
    val map = mapOf("a" to "b")
    val cls = map.javaClass.kotlin
    cls.members
}

抛出:kotlin.reflect.KotlinReflectionInternalError: Incorrect resolution sequence for Java field public open val values: kotlin.collections.MutableCollection<(V..V?)> defined in java.util.Collections.SingletonMap[JavaPropertyDescriptor@10163d6]

@Test fun mapProperties2() {
    val map = mapOf("a" to "b")
    val cls = clsByReified(map)
    cls.members
}

inline fun <reified T: Any> clsByReified(instance: T): KClass<T> {
    return T::class
}

抛出:kotlin.reflect.KotlinReflectionInternalError: No metadata found for public abstract val entries: [Not-computed] defined in kotlin.collections.Map[DeserializedPropertyDescriptor@5c1a8622]

不确定我是偶然发现了一个错误还是错过了什么。

1 个答案:

答案 0 :(得分:2)

这是最近修复过的错误,可在夜间版本中使用。即将发布的Kotlin 1.0.2版本将包括该修复程序。这是原始问题:KT-11258