2016-11-11 5 views
2

なぜこれは機能しませんか?しかし、Javaで動作しています。Kotlinのジェネリックスがクラス階層内で一致しない

class MyList : java.util.LinkedList<String>() 

fun main(args: Array<String>) { 
    val x: java.util.List<String> = MyList() 
} 

私が割り当てラインについては

Type mismatch: inferred type is MyList but List<String> was expected 

を取得します。オンライン評価のための

リンク:

そうなこの行動の理由ですKotlinは直接 java.util.List<E>インタフェースを使用していないということです何
val x: List<String> = MyList() // List<String>, not java.util.List<String> 

が、代わりに、それは次のとおりです。http://try.kotlinlang.org/#/UserProjects/70dhmnocn8ueh73hg0o61mp01f/8ormftvrpbimfu0l3uf37galv

+1

同様の質問:

は、Javaコレクションインタフェースマッピングのドキュメントを参照してください。http://stackoverflow.com/q/34255329/3255152 – mfulton26

答えて

3

はにあなたのval宣言を変更しますデフォルトでインポートされるkotlin.collections.List<E>kotlin.collections.MutableList<E>にマップされ、java.util.List<T>の使用に関するIDE警告さえあります。

java.util.List<E>は、タイプチェック中にLinkedList<String>のクラス階層で完全にkotlin.collections.List<E>に置き換えられています。 (代わりにList` `のMap`しかし、`について同じことが当てはまるが)(link)

関連する問題