【发布时间】:2013-04-29 18:42:36
【问题描述】:
我在使用 java 泛型时遇到了问题。 当我从迭代器中使用 next() 时,它不会返回与我实例化它的类型相同的对象。所以我收到一个不兼容的类型错误。 有人可以帮忙吗?
我在编译链表类时也会收到 Xlint 警告。
public class LinkedList<Type>
{
private Node<Type> sentinel = new Node<Type>();
private Node<Type> current;
private int modCount;
public LinkedList()
{
// initialise instance variables
sentinel.setNext(sentinel);
sentinel.setPrev(sentinel);
modCount = 0;
}
public void prepend(Type newData)
{
Node<Type> newN = new Node<Type>(newData);
Node<Type> temp;
temp = sentinel.getPrev();
sentinel.setPrev(newN);
temp.setNext(newN);
newN.setPrev(temp);
newN.setNext(sentinel);
modCount++;
}
private class ListIterator implements Iterator
{
private int curPos, expectedCount;
private Node<Type> itNode;
private ListIterator()
{
curPos =0;
expectedCount = modCount;
itNode = sentinel;
}
public boolean hasNext()
{
return (curPos < expectedCount);
}
public Type next()
{
if (modCount != expectedCount)
throw new ConcurrentModificationException("Cannot mutate in context of iterator");
if (!hasNext())
throw new NoSuchElementException("There are no more elements");
itNode = itNode.getNext();
curPos++;
current = itNode;
return (itNode.getData());
}
}
}
这是在创建列表并填充不同类型的形状后,主类中出现错误的地方。
shape test;
Iterator iter = unsorted.iterator();
test = iter.next();
【问题讨论】:
-
您确定在代码中的任何地方都没有使用原始类型(例如纯
LinkedList而不是LinkedList<String>)吗?这可能是对您所描述内容的解释。请显示您实际调用next的代码,错误发生的位置。 -
private Node current;应该是private Node<Type> current;?
标签: java generics iterator incompatibletypeerror