如果有一个泛型类型node<E>
与像setData(E Type)
两个操作和E getData()
,让s0
是node
一个实例由node<? extends Number>
那么我们为什么不编译器允许我至少使用s0.setData(Number Type)
?我可以理解为什么不允许其他类型,但为什么不允许setData
输入一个数字类型,因为我们确信节点的类型至少是数字?的java通用歧义
我的代码如下所示:
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!
你如何测试代码? – 2013-03-13 03:28:11
显示一些代码,很难理解你的意思。 – Mordechai 2013-03-13 03:30:48