【发布时间】:2021-01-22 13:37:45
【问题描述】:
我无法解决一个看似简单的问题。我有 Reply 类,它可以包含不同的响应类型 - Views:
interface View
data class NiceView(val name: String) : View
class MyReply<T : View>(view: T)
现在,我想编写一个函数来接受命令并根据命令返回适当的视图:
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
我确实尝试过使用in 和out 关键字来处理协变和逆变,但无济于事。有人可以在这里指出我正确的方向吗?
【问题讨论】:
-
如果你有时间,这是一个很棒的系列帖子:typealias.com/guides/…
标签: kotlin generics contravariance