Внутренний интерфейс в генерирует ошибки только при параметризации внешнего класса? Зачем?
Абстрактный метод 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 {
}
}