gpt4 book ai didi

java - 如何使协变 Consumer工作?

转载 作者:行者123 更新时间:2023-12-02 02:06:14 27 4
gpt4 key购买 nike

这是我能想到的用来说明问题的最小代码示例:

public void consumeDerived(Consumer<Derived> derivedConsumer, Derived derivedParameter) {
consumeBase(derivedConsumer, derivedParameter);
}

public void consumeBase(Consumer<? extends Base> baseConsumer, Base baseParameter) {
baseConsumer.accept(baseParameter);
}

这个想法是对 consumeDerived 的调用简单地传递给 consumeBase 方法。据我了解,调用 baseConsumer.accept() 应该能够采用类型 Base 或类型 Derived extends Base

但是我收到错误:java: 不兼容的类型: Base 无法转换为 capture#1 of ?基础

我需要做什么才能使这项工作成功?

最佳答案

问题是 Consumer<? extends Base>是扩展 Base某物的消费者。它可能是 Consumer<Derived> ,并且无法接受 Base作为一个论点 - 它不够具体。

您可以添加泛型类型参数来解决此问题:

public <T extends Base> void consumeBase(Consumer<T> baseConsumer, T baseParameter) {
baseConsumer.accept(baseParameter);
}

还值得注意的是consumeDerived现在是多余的。

关于java - 如何使协变 Consumer<?扩展基地>工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50760509/

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