Java 对泛型类型的引用应参数化。构造函数或类型参数相关的警告
我正在创建一个LinkedList类和一个LinkedListNode,我希望它们是泛型的,以便以后可以根据情况选择类型参数。 所以我创建了这两个类: 双链接列表类:Java 对泛型类型的引用应参数化。构造函数或类型参数相关的警告,java,generics,Java,Generics,我正在创建一个LinkedList类和一个LinkedListNode,我希望它们是泛型的,以便以后可以根据情况选择类型参数。 所以我创建了这两个类: 双链接列表类: public class DoublyLinkedList<T> { // sentinel before first item private NodeDoublyLinked<T> head; // sentinel after last item private No
public class DoublyLinkedList<T> {
// sentinel before first item
private NodeDoublyLinked<T> head;
// sentinel after last item
private NodeDoublyLinked<T> tail;
//number of elements
private int size;
// getter and setter methods here
//add new node to the linked List
public void addNode(T data){
NodeDoublyLinked<T> prev = tail.getPrev();
NodeDoublyLinked<T> node = new NodeDoublyLinked(data, prev, tail);
tail.setPrev(node);
size++;
}
}
公共类双链接列表{
//第一项前的哨兵
私有节点双联头;
//最后一项后的哨兵
私有节点双联尾;
//元素数
私有整数大小;
//这里有getter和setter方法
//将新节点添加到链接列表中
公共无效添加节点(T数据){
NodeDoublyLinked prev=tail.getPrev();
NodeDoublyLinked节点=新NodeDoublyLinked(数据、上一个、尾部);
tail.setPrev(节点);
大小++;
}
}
以及NodeDoublyLinked类:
import java.util.Iterator;
import java.util.NoSuchElementException;
public class NodeDoublyLinked<T> implements Iterable<T> {
private T data;
private NodeDoublyLinked<T> prev;
private NodeDoublyLinked<T> next;
public NodeDoublyLinked(T value, NodeDoublyLinked<T> previousN, NodeDoublyLinked<T> nextN) {
this.data = value;
this.prev = previousN;
this.next = nextN;
}
// getter and setter methods
@Override
public Iterator<T> iterator() {
return new NodeDoublyLinkedIterator();
}
private class NodeDoublyLinkedIterator implements Iterator<T> {
// the current node returned by next()
NodeDoublyLinked<T> current = prev.next;
@Override
public boolean hasNext() {
return current != null;
}
@Override
public T next() {
// code here
}
public void remove(){
// code here
}
}
}
import java.util.Iterator;
导入java.util.NoSuchElementException;
公共类NodeDoublyLinked实现了Iterable{
私有T数据;
私有节点双链接prev;
私有节点下一步进行双向链接;
公共NodeDoublyLinked(T值,NodeDoublyLinked上一个,NodeDoublyLinked下一个){
这个数据=值;
this.prev=previousN;
this.next=nextN;
}
//getter和setter方法
@凌驾
公共迭代器迭代器(){
返回新的nodeDoublyLinkederator();
}
私有类NodeDoublyLinkedeter实现迭代器{
//next()返回的当前节点
NodeDoublyLinked current=prev.next;
@凌驾
公共布尔hasNext(){
返回电流!=null;
}
@凌驾
公共交通工具{
//代码在这里
}
公共空间删除(){
//代码在这里
}
}
}
在DoublyLinkedList类中的addNode方法中,在此行:
NodeDoublyLinked<T> node = new NodeDoublyLinked(data, prev, tail);
NodeDoublyLinked节点=新的NodeDoublyLinked(数据,上一个,尾部);
我得到一个警告:
NodeDoublyLinked是原始类型。泛型类型的引用
NodeDoublyLinked应参数化
我检查了,所以我知道应该在右侧指定一个类型参数,但它也不正确。我应该用一个类型参数(例如Integer)替换类型参数吗?NodeDoublyLinked的构造函数是否有问题?“…因此我理解我应该在右侧指定一个类型参数,但它也不正确…”您所说的“它也不正确”是什么意思?你做了什么?(您还没有显示它。)
code
NodeDoublyLinked节点=新建NodeDoublyLinked(数据,上一个,尾部)code
=>编译器返回一个错误。当您将
添加到构造函数的调用中时,会出现什么错误?没有像我调用的构造函数那样的构造函数。当我添加类似的构造函数时,构造函数中会出现一个错误:previousN无法解析为变量。另外,如果在调用中仅使用括号,则会出现错误。在构造函数调用中使用
可修复此问题:。