gpt4 book ai didi

java泛型歧义

转载 作者:行者123 更新时间:2023-11-29 09:05:15 24 4
gpt4 key购买 nike

如果有泛型node<E>有两个操作,如 setData(E Type)E getData()s0node 的实例通过 node<? extends Number>那为什么编译器不允许我使用 s0.setData(Number Type)至少?我能理解为什么不允许其他类型但为什么不允许 setData放入数字类型,因为我们确定节点的类型至少是数字?

我的代码是这样的:

class Node<E> {
private E data;
// ...
public void setData(E obj) { data = obj; } // (1)
public E getData() { return data; } // (2)
// ...
}
Node<? extends Number> s0 = new Node<Number>();
s0.setData(200); //this is not allowed why?
Node<Number> s0 = new Node<Number>();
s0.setData(100); //But this is allowed!

最佳答案

您已声明类型 a Node<? extends Number> .您分配给它的内容是无关紧要的。

就编译器而言,它可能是以下任何一种:

  • Node<Integer>
  • Node<Float>
  • Node<Double>
  • 等等

而且它无法知道哪种类型是实际类型。

您正在尝试传递(自动装箱)Integer , 但编译器不知道 actual 类型可以接受 Integer .

关于java泛型歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15376515/

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