我正在试图找出整个Java泛型主题。
更具体地说,这个问题:
public class Node<E>{
private E data;
public Node(E data){
this.data=data;
}
public E get(){
return this.data;
}
public void set(E data){
this.data=data;
}
}
如何添加“扩展”通配符,指定 set 方法可以接收E 或任何继承E类(在这种情况下,Node将保持上升状态)参数的版本。)
或者即使我按原样保留它也会有效吗?
(我可能会对泛型类型的不变方面感到困惑。)
谢谢!
答案 0 :(得分:3)
您已宣布您的班级Node<E>
已接受任何继承类E
。
答案 1 :(得分:3)
你的班级已经在做你需要的了。让我们举例说明。假设您已创建节点(Number
是超级Integer
,Long
等);
Node<Number> numberNode = new Node<Number>(1);
您也可以通过传递其子类来调用set方法
numberNode.set(new Integer(1));
numberNode.set(new Long(1));
答案 2 :(得分:0)
如果您使用
public void set(E extends SomeType){
this.data=data;
}
然后你可以传递implements or extends SomeType
的任何对象
记住,SomeType
在这里也可以是interface
,即使很奇怪,我们也需要写E extends SomeType
。
答案 3 :(得分:0)
或者它会起作用吗??
或者您 tried it out if it works ?
final Node<Number> n = new Node<Number>(new Integer(666));
System.out.println(n.get());
n.set(new Integer(777));
System.out.println(n.get());