Kotlin中有这样一段代码:
val collection: java.util.Collection<String> = java.util.ArrayList<String>()
为什么编译时出现错误:
type mismatch: inferred type is ArrayList<String> but Collection<String> was expected. 这可能是正常行为,但我不明白为什么。
Kotlin中有这样一段代码:
val collection: java.util.Collection<String> = java.util.ArrayList<String>()
为什么编译时出现错误:
type mismatch: inferred type is ArrayList<String> but Collection<String> was expected. 这可能是正常行为,但我不明白为什么。
在 Kotlin 类型层次结构中,Java 标准库的类型
java.util.Collection和java.util.List其他集合接口被替换为对应的 fromkotlin.collections.*,默认导入,例如List,这些就是所谓的映射类型。在这种情况下,Java 标准库中的每个集合接口都映射到两种类型——只读接口和可变集合接口:
java.util.List→List(不包含用于更改列表的函数)和MutableList.因此,Kotlin 的编译器在检查类型时
ArrayList不是java.util.Listorjava.util.Collection(因此错误),而是在其类型kotlin.collections.List层次结构中有 ,kotlin.collections.Collection。IntelliJ IDEA 发出警告,指出
java.util.*不应在 Kotlin 代码中使用来自的集合接口。修复错误的最简单方法是将中的接口替换为
java.util.*中的相应接口kotlin.collections.*:或者,分别
另请参阅StackOverflow 上的类似问题。