Ich möchte eine benutzerdefinierte Baumdatenstruktur nur mit Knoten erstellen, wo ich über sie iterieren könnte. Dann konnte ich später diese Klasse erweitern und haben sehr grundlegende BaumJava-Klasse, die ihren eigenen Typ iteriert, wenn sie erweitert wird
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
}
}
ich diese bekommen haben zu arbeiten, aber das Problem kommt, wenn ich versuche, die Node-Klasse zu erweitern. Bei einer erweiterten Klasse gibt die geerbte Iterator-Methode immer noch den Knoten-Iterator zurück, was bedeutet, dass ich jedes Mal neu bestimmen muss. Hier ist ein grundlegendes Beispiel für das Problem, auf das ich gestoßen bin. Lassen Sie uns einen Baum machen, die ganzen Zahlen gilt:
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);
}
}
Gibt es eine einfache Möglichkeit, dies zu beheben, ohne dass der Iterator() -Methode von der Node-Klasse in die IntegerNode Klasse kopieren?
Vielen Dank! Ich dachte an generische Typen, aber ich habe vergessen, dass Sie den Typ beim Erweitern festlegen können. ex: IntegerNode >>> –
XeroOl