gpt4 book ai didi

kotlin - Kotlin泛型函数和协方差

转载 作者:行者123 更新时间:2023-12-02 12:40:00 24 4
gpt4 key购买 nike

我无法解决一个看似简单的问题。我有Reply类,它可以包含不同的响应类型-Views:

interface View
data class NiceView(val name: String) : View

class MyReply<T : View>(view: T)
现在,我想编写一个接受命令并根据该命令返回适当 View 的函数:
fun <T : View> handle(command: Command): Reply<T> {
return Reply(NiceView(""))
}
我在这里可以看到两个问题:
  • 我在返回类型Reply<T>上遇到这个奇怪的错误,但这仅在以下玩具示例中发生,而不在我的生产代码中发生:
    Type argument is not within its bounds.
    Expected: View
    Found: T
  • 返回Reply()时出错。这是杀死我的大脑的东西,这就是我在生产代码中看到的东西:
    Type mismatch.
    Required: T
    Found: NiceView
    Type mismatch.
    Required: Reply<T>
    Found: Reply<NiceView>
    Type mismatch.
    Required: View
    Found: NiceView

  • 我确实尝试使用 inout关键字弄乱协方差和逆方差,但无济于事。有人可以在这里指出正确的方向吗?

    最佳答案

    fun <T : View> handle(command: Command): Reply<T> {并不表示“接受命令并返回适当 View ”的函数。它的意思是“一个函数,它接受一种 View 类型和一个命令,并返回该 View 类型的答复。” handle的调用者可以选择想要获取的View的任何类型,这不是您想要的-也不是您已实现的类型,因为用户可能想要的不是NiceView
    给定您指定的目标,此代码中handle函数的适当类型是

    fun handle(command: Command): Reply<*>

    关于kotlin - Kotlin泛型函数和协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64246717/

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