可序列化类NodeListImpl不声明long类型的静态最终serialVersionUID字段

时间:2014-05-22 13:56:20

标签: java generics

我对仿制药很新。我正在经历“NodeListImpl是一个原始类型。对泛型类型NodeListImpl的引用应该参数化”并且有一些关于它的问题,因为我还没有得到所有这些。

代码:

public class Node<T> {
    private String name;
    private T value;
    private NodeListImpl<Node<T>> nodes = new NodeListImpl<Node<T>>();

    public void addChild (Node<T> child) {
        this.nodes.add(child);
    }
}

public interface List<T> extends Iterable<T> {
    public abstract boolean contains(Object e);
    public abstract boolean add(T e);
    public abstract void addFirst(T e);
    public abstract T peekFirst();
    public abstract boolean isEmpty();
    public abstract T pollFirst();
    public abstract void clear();
}

public class ListImpl<T> extends LinkedList<T> implements List<T> {
}

public interface NodeList<Node> extends Iterable<Node> {
    public abstract boolean contains(Node e);
    public abstract boolean add(Node e);
    public abstract void addFirst(Node e);
    public abstract Node peekFirst();
    public abstract boolean isEmpty();
    public abstract Node pollFirst();
    public abstract void clear();
}

public class NodeListImpl<Node> extends LinkedList<Node> implements NodeList<Node> {

}

任务是:

  1. 编写一个List,可以处理存储和操作所有类型的数据。示例:整数列表,B类列表等

  2. 编写该列表的专用版本,可以执行相同的操作,但仅限于节点。

  3. 问题/问题:

    1. 由于我们的List需要能够处理所有类型的数据,我想我们会把它作为List。这是对的吗?

    2. 我们的NodeList应该只能使用Nodes,所以我把它作为NodeList。这是对的吗?

    3. 如前所述,我得到“NodeListImpl是原始类型。应该参数化泛型类型NodeListImpl”。我明白,Node本身有一个泛型类型,因为它需要存储一个可变类型的值。当我说NodeListImpl它以某种方式阻止Node的视图。所以我试过像NodeListImpl&gt;这样的东西。这不起作用。我做错了什么?

    4. 非常感谢!

1 个答案:

答案 0 :(得分:0)

考虑1:

List<T>没问题。

考虑2: 你的NodeList课程错了。 class NodeList<Node>...声明了一个类NodeList,其中类型参数名为Node,它将影响您的班级Node。你应该写什么:

class NodeList<T extends Node>

然后你有一个类型参数为T的类,但T必须是Node的子类。

考虑3: 您的节点类也是一个模板类,因此它还需要一个参数T,例如NodeList<T extends Node<T>>。但为什么Node是通用的?