Java泛型方法的参数

时间:2013-07-03 07:29:11

标签: java generics

我正在试图找出整个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将保持上升状态)参数的版本。)

或者即使我按原样保留它也会有效吗?

(我可能会对泛型类型的不变方面感到困惑。)

谢谢!

4 个答案:

答案 0 :(得分:3)

您已宣布您的班级Node<E>已接受任何继承类E

答案 1 :(得分:3)

你的班级已经在做你需要的了。让我们举例说明。假设您已创建节点(Number是超级IntegerLong等);

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());