Внутренний интерфейс в генерирует ошибки только при параметризации внешнего класса? Зачем?

Абстрактный метод getNextNode генерирует ошибку, "не может сделать статическую ссылку на узел нестатического типа", но только если параметризован LinkedList. Если я удалю универсальный из LinkedList, ошибка исчезнет. Зачем?

public class LinkedList<T> {
    Node head;
    public LinkedList() {
        head = new Node();
    }
    private class Node {

    }

    interface stuff {
        public Node getNextNode();//ERROR Cannot make a static reference to the non-static type Node
    }
}

3 ответа

Решение

Поскольку ошибка пытается вам сказать, вы не можете использовать универсальный тип без его параметра.

Node на самом деле LinkedList<T>.Node, Поскольку ваш интерфейс не является универсальным (интерфейсы не наследуют параметры типа от содержащего класса), нет T это может заменить.

Вы можете исправить это, сделав Node учебный класс static, чтобы он не наследовал параметр типа от содержащего его класса.
Тем не менее, вы на самом деле не хотите этого делать, так как Node должно быть общим.

Вы действительно должны сделать свой интерфейс также общим, чтобы он мог указывать T,

Node Короче для LinkedList<T>.Node и ваш getNextNode() не знает что T является.

    interface can't be defined in an inner class


    http://www.xyzws.com/javafaq/why-an-interface-cant-be-defined-in-an-inner-class/56

public class Test{
interface stuff {
        public LinkedList.Node getNextNode();
    }
    public class LinkedList<T> {
        Node head;

        public LinkedList() {
            head = new Node();
        }
        private class Node {

        }
}
Другие вопросы по тегам