2016-11-11 81 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 

對於分配行。

鏈接在線EVAL:http://try.kotlinlang.org/#/UserProjects/70dhmnocn8ueh73hg0o61mp01f/8ormftvrpbimfu0l3uf37galv

+1

類似的問題(儘管約'Map',而不是'List'但同樣適用):http://stackoverflow.com/q/34255329/3255152 – mfulton26

回答

3

更改val聲明:

val x: List<String> = MyList() // List<String>, not java.util.List<String> 

什麼是可能的這種現象的原因是,科特林不直接使用java.util.List<E>接口,相反,它是映射到默認導入的kotlin.collections.List<E>kotlin.collections.MutableList<E>,甚至有一個關於java.util.List<T>用法的IDE警告。

看似,java.util.List<E>完全被kotlin.collections.List<E>在類層次結構的類型檢查期間被替換爲LinkedList<String>

瞭解Java集合接口映射文檔:(link)