如果有一个node<E>
具有两个操作的泛型类型,比如setData(E Type)
andE getData()
并且 lets0
是的一个实例,node
那么node<? extends Number>
为什么编译器s0.setData(Number Type)
至少不允许我使用呢?我可以理解为什么不允许使用其他类型,但为什么不允许setData
放入 Number 类型,因为我们确定节点的类型至少是 number?
我的代码如下所示:
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!