Java 不兼容类型 无法转换为通配符参数 HashMap<> 里面
最近,我在编译过程中遇到了以下错误:
error: incompatible types: HashMap<Integer, HashMap<Object, Consumer<A>>> cannot be converted
to HashMap<Integer, HashMap<Object, Consumer<? extends B>>>
在此代码中,类 a
是 b
的直接子类。
此错误发生在以下片段中:
HashMap<Integer, HashMap<Object, Consumer<A>>> item = new HashMap<>();
HashSet<HashMap<Integer, HashMap<Object, Consumer<? extends B>>>> set = new HashSet();
set.add(item);
试图解决错误,我已经尝试删除?从
扩展位 hashset 的内部,但是编译器不断丢弃错误。 hashmap
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
消费者&lt; a&gt;
和消费者&lt;扩展B&gt;
是完全不同的,实际上消费者?扩展b&gt;
可以是消费者&lt; c&gt;
其中c
是另一个类的类,与
consemer&lt; a&gt;
相同。消费者&lt; b&gt;
它们不是同一回事,b
类的实例不是a
类的实例,因此请删除<<<<<代码>?扩展仍然会给您编译时间错误。Consumer<A>
andConsumer<? extends B>
are totally different , in factConsumer<? extends B>
can beConsumer<C>
whereC
is another class who extends B.The same with
Consumer<A>
andConsumer<B>
they are not the same thing, an instance ofB
class is not an instance ofA
class, so deleting the? extends
still give you a compile time error.