2016-10-30 9 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 

なぜ失敗している、と私はこの問題を解決するために変更には何が必要ですか?

注:コードは、IntelliJのコンバータを使用してJavaから自動的に変換されました。

答えて

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

関連する問題