Par*_*val 3 java generics extends
public class MyList<Item> implements Iterable<Item> {
Node<Item> first;
int n = 0;
private static class Node<Item>
{
private Item item;
private Node<Item> next;
}
public Iterator<Item> iterator() {
return new ListIterator<Item>();
}
private class ListIterator<Item> implements Iterator<Item> // parameter Item is hiding the type Item
{
private Node<Item> current = first; // This does not compile
public boolean hasNext() {
return (current != null);
}
public Item next() {
Item item = current.item;
current = current.next;
return current.item;
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
"类型不匹配:无法从MyList.Node转换为MyList.Node".
不确定这是否与警告有关
"参数Item隐藏了类型项"
如果我收到警告private class ListIterator<Item> implements Iterator<Item>,为什么我没有收到警告public class MyList<Item> implements Iterable<Item>?
如果内部类的泛型类型参数ListIterator应与封闭类的类型参数相同MyList,则不应将其声明两次.
将内部类更改为:
private class ListIterator implements Iterator<Item>
Run Code Online (Sandbox Code Playgroud)
这样,类型first和current将是相同的.
正如Michael评论的那样,您必须将ListIterator实例的构造更改为:
public Iterator<Item> iterator() {
return new ListIterator();
}
Run Code Online (Sandbox Code Playgroud)