5

我试图弄清楚整个 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方法可以接收 EE的任何继承类(在这种情况下,节点将保存参数的升级版本)。

还是即使我保持原样它也会起作用?

(我可能对泛型类型的不变方面有点困惑。)

谢谢!

4

4 回答 4

3

你声明了你的类 Node<E> ,它已经接受了任何继承的E.

于 2013-07-03T07:32:53.353 回答
3

你的班级已经在做你需要的。让我们通过例子来演示。假设您已经创建了 Node (Number是 的超类IntegerLong);

Node<Number> numberNode = new Node<Number>(1);

您也可以通过传递其子类来调用 set 方法

numberNode.set(new Integer(1));
numberNode.set(new Long(1));
于 2013-07-03T07:39:13.700 回答
0

如果你使用

public void set(E extends SomeType){
 this.data=data;
 }

那么你可以传递任何可以记住的对象,implements or extends SomeType 这里SomeType也可以是一个interface,即使它很奇怪,我们也需要写E extends SomeType.

于 2013-07-03T07:35:09.087 回答
0

或者它会工作......?

或者你有没有试过它是否有效

        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());
于 2013-07-03T07:44:03.737 回答