我对仿制药很新。我正在经历“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> {
}
任务是:
编写一个List,可以处理存储和操作所有类型的数据。示例:整数列表,B类列表等
编写该列表的专用版本,可以执行相同的操作,但仅限于节点。
问题/问题:
由于我们的List需要能够处理所有类型的数据,我想我们会把它作为List。这是对的吗?
我们的NodeList应该只能使用Nodes,所以我把它作为NodeList。这是对的吗?
如前所述,我得到“NodeListImpl是原始类型。应该参数化泛型类型NodeListImpl”。我明白,Node本身有一个泛型类型,因为它需要存储一个可变类型的值。当我说NodeListImpl它以某种方式阻止Node的视图。所以我试过像NodeListImpl&gt;这样的东西。这不起作用。我做错了什么?
非常感谢!
答案 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
是通用的?