Kotlin:从类对象中获取超类 - 对象推断错误

时间:2016-10-30 12:27:01

标签: kotlin

以下代码应遍历传递的对象类的超类链,直到达到顶级。

protected fun getBestMethodFor(o: Any): Method? {
    val nodeClass = o.javaClass
    val objectClass = Any::class.java
    ...

    // Go through superclasses.
    var c = nodeClass
    while (c != objectClass && ans == null) {
        debugMsg("Looking for class match for " + c.name)
        ...
        c = c.superclass
    }
    ...
}

这导致2个错误:

Error:(57, 17) Kotlin: Type mismatch: inferred type is Class<in Any!>! but Class<Any> was expected
Error:(57, 19) Kotlin: Type inference failed. Expected type mismatch: inferred type is Class<in Any!>! but Class<Any> was expected

为什么会失败,我需要更改什么才能解决这个问题?

注意:代码是使用IntelliJ的转换器从Java自动转换的。

1 个答案:

答案 0 :(得分:1)

在Java中,Class<T>.getSuperClass()返回Class<? super T>。 Kotlin中的这个等值是Class<in T>

在您的代码中,var c = nodeClass的隐含类型为Class<Any>,与Class<in T>不兼容。

要解决此问题,只需直接指定类型c:

var c: Class<in Any> = nodeClass