奇怪的Java编译器错误(错误:(65,23)java:不兼容的类型:Bag<Item>。节点<Item>无法转换为 Bag<Item>。节点<Item>



我很困惑。我无法将外部类的实例变量Node first分配给内部类的实例变数Node current。编译器抱怨存在不兼容的类型。如果我应用cast,它会起作用。这里发生了什么。

import java.util.*;
import java.lang.Iterable;
class Bag<Item> implements Iterable<Item> {
    private class Node<Item> {
        private Item item;
        private Node<Item> next;
    }
    private Node<Item> first;
    private int size;
    public Bag() {
        first = null;
        size = 0;
    }
    public void add(Item item) {
        Node<Item> oldNode = first;
        Node<Item> newNode = new Node<>();
        newNode.item = item;
        newNode.next = oldNode;
        first = newNode;
        size++;
    }
    public boolean isEmpty() { return first == null; }
    public int getSize() { return size; }
    public Iterator<Item> iterator() {
        return new ListIterator<Item>(first);
    }
    private class ListIterator<Item> implements Iterator<Item> {
        private Node<Item> current;
        public ListIterator(Node<Item> node) {
            // Error is here Error:(65, 23) java: incompatible           types:             Bag<Item>.Node<Item> 
            //cannot be converted to Bag<Item>.Node<Item>
            // current and first are of the same type (Node<Item>).
            // What is the problem, why shall I apply when the types are the same.
            current = first; 
        }
        @Override
        public boolean hasNext() {
            return current != null;
        }
        @Override
        public void remove() {
            throw new UnsupportedOperationException("remove");
        }
        @Override
        public Item next() {
            if (!hasNext()) throw new NoSuchElementException();
            Item item = current.item;
            current = current.next;
            return item;
        }
    }
    public String toString() {
        StringBuilder s  = new StringBuilder();
        Iterator<Item> it = iterator();
        while (it.hasNext())
            s.append(it.next() + " ");
        return s.toString();
    }
}
public class Main {
    public static void main(String[] args) {
        int data[] = new int[5];
        Bag<Integer> bag = new Bag<>();
        for (int i = 0; i < data.length; i++)
            data[i] = new Random().nextInt(1000);
        //Arrays.sort(data);
        System.out.println(Arrays.toString(data));
        for (int i = 0; i < data.length; i++)
            bag.add(data[i]);
        System.out.println( "Size: " + bag.getSize() );
        System.out.println( bag );
    }
}

更改

private class Node<Item> {
private class ListIterator<Item> implements Iterator<Item> {

private class Node {
private class ListIterator implements Iterator<Item> {