gpt4 book ai didi

generics - Kotlin类型不匹配,泛型

转载 作者:行者123 更新时间:2023-12-02 12:51:36 25 4
gpt4 key购买 nike

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

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无法进行类型推断,并猜测 Page<Owl>也是 Page<Animal>

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

最佳答案

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

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

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

return page
}

关于generics - Kotlin类型不匹配,泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com