2016-10-30 3 views
1

Следующий код должен перебирать цепочку суперклассов класса переданного объекта до тех пор, пока не будет достигнут верхний уровень.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 

Почему этот недостаток, и что мне нужно изменить, чтобы исправить это?

Примечание: код был автоматически преобразован из Java с использованием конвертера IntelliJ.

ответ

1

В Java, Class<T>.getSuperClass()Class<? super T>. Уравнительным в Котлине является Class<in T>.

В вашем коде var c = nodeClass имеет неявный тип Class<Any>, который несовместим с Class<in T>.

Чтобы это исправить, просто указать тип C непосредственно:

var c: Class<in Any> = nodeClass

Смежные вопросы