【问题标题】:Kotlin generics mismatch in a class hierarchy类层次结构中的 Kotlin 泛型不匹配
【发布时间】:2016-11-11 13:42:35
【问题描述】:

为什么这不起作用?不过它可以在 Java 中运行。

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

对于赋值行。

在线评估链接:http://try.kotlinlang.org/#/UserProjects/70dhmnocn8ueh73hg0o61mp01f/8ormftvrpbimfu0l3uf37galv

【问题讨论】:

标签: generics kotlin


【解决方案1】:

将您的 val 声明更改为:

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

这种行为的原因可能是Kotlin没有直接使用java.util.List&lt;E&gt;接口,而是映射到默认导入的kotlin.collections.List&lt;E&gt;kotlin.collections.MutableList&lt;E&gt;,甚至还有IDE警告关于java.util.List&lt;T&gt; 的使用。

看起来,在类型检查期间,LinkedList&lt;String&gt; 的类层次结构中的java.util.List&lt;E&gt; 完全替换为kotlin.collections.List&lt;E&gt;

请参阅有关 Java 集合接口映射的文档:(link)

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2016-09-14
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多