Kotlin类型不匹配,泛型

奥雷斯特·维隆(Oreste Viron)

我在科特林发现了一种奇怪的行为。给定此代码:

interface Animal

class Owl : Animal

class Page<T>(var list: List<T>)


fun ok(): List<Animal> {
    val list = listOf(
            Owl()
    )

    return list
}

fun error(): Page<Animal>  {
    val list = listOf(
            Owl()
    )

    val page: Page<Owl> = Page(list)

    return page
}

猫头鹰实施动物。第一个函数编译,但是在第二个函数上,我得到了错误:

Type mismatch.
Required: Page<Animal>
Found: Page<Owl>

我不明白为什么Kotlin无法进行类型推断,并猜测aPage<Owl>也是a Page<Animal>

有人可以给我提示,可能还有一些解决方法吗?

特维斯司令

在您的示例中,error()函数返回不变的Page <Animal>,因此它必须是Page <Animal>对象:而不是Page <Owl>。您应该添加out到泛型以使其协变,因此固定实现为:

fun error(): Page<out Animal>  {
    val list = listOf(
        Owl()
    )

    val page: Page<Owl> = Page(list)

    return page
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Kotlin泛型继承-类型不匹配

来自分类Dev

Scala泛型:类型不匹配

来自分类Dev

Scala类型与泛型不匹配

来自分类Dev

Java Stream泛型类型不匹配

来自分类Dev

Scala:类型与嵌套泛型不匹配

来自分类Dev

与classOf Scala的类型不匹配的泛型

来自分类Dev

Scala泛型:类型不匹配

来自分类Dev

Kotlin泛型在类层次结构中不匹配

来自分类Dev

Java泛型。类型不匹配:无法从对象转换为

来自分类Dev

Java泛型-类型从T到T不匹配

来自分类Dev

Java泛型。类型不匹配:无法从对象转换为

来自分类Dev

Java泛型绑定不匹配递归类型

来自分类Dev

泛型类型的模式匹配

来自分类Dev

泛型不兼容类型

来自分类Dev

Java泛型参数不匹配

来自分类Dev

Scala泛型;为什么会出现“类型不匹配,预期:T,实际T”

来自分类Dev

将变量分配给基于泛型的变量时类型不匹配

来自分类Dev

在将变量分配给基于泛型的变量时类型不匹配

来自分类Dev

如何匹配Scala泛型类型?

来自分类Dev

泛型类型的 Akka 模式匹配

来自分类Dev

Scala泛型类型方法匹配

来自分类Dev

Java泛型:不兼容的类型

来自分类Dev

返回泛型而不指定类型参数

来自分类Dev

使用泛型的不兼容类型

来自分类Dev

Java泛型:不兼容的类型

来自分类Dev

泛型不执行类型擦除

来自分类Dev

泛型类型在Kotlin列表上的filterNotNull

来自分类Dev

Kotlin平台类型和泛型

来自分类Dev

Kotlin从泛型类型获取属性