Я хотел бы создать собственную структуру данных дерева только с узлами, где я мог бы перебирать их. Тогда я мог бы позже продлить этот класс и имею очень базового деревоJava Class, который повторяет свой собственный тип при расширении
class Node{
Node parent;
ArrayList<Node> children;
public static void main(String[]args){
Node root = new Node();
for(Node child : root){
//do something
}
}
public Iterator<Node> iterator(){
// basic tree traversal iterator
}
}
Я получил эту работу, но проблема возникает, когда я пытаюсь расширить класс Node. С расширенным классом унаследованный метод итератора по-прежнему возвращает итератор узла, что означает, что я должен запускать каждый раз. Вот основной пример проблемы, с которой я столкнулся. Давайте создадим дерево, которое держит целые числа:
class IntegerNode extends Node{
int value;
public static void main(String[]args){
IntegerNode root = new IntegerNode();
int total = 0;
for(IntegerNode child : root){ /* Compiler error, says that the
iterator returns Iterator<Node> and not Iterator<IntegerNode>*/
total+=child.value;
}
System.out.println(total);
}
}
Есть простой способ исправить это без необходимости копировать метод итератора() из класса Node в класс IntegerNode?
Спасибо! Я думал об использовании общих типов, но я забыл, что вы можете установить тип при расширении. ex: IntegerNode >>> –
XeroOl