在未知(Any)对象上调用kclass.memberProperties是否安全?
我认为只需访问KClass
对象的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]
不知道是我偶然发现了一个错误还是错过了一些东西。
这是一个最近已经修复的错误,并在每晚的构建中可用。 即将到来的Kotlin 1.0.2版本将包含修复程序。 这是原来的问题: KT-11258 。