Ich versuche, eine rekursive Baumstruktur mit beliebigen Schlüsseln in Java zu implementieren. Grundsätzlich was ich will, ist eine Tree<X,Y>
, die eine X
und mehr (Sub-) Bäume enthält, durch eine Reihe von Y
s indiziert. Da die Bäume jedoch für die Indizierung von Daten in einer schreibgeschützten Datei verwendet werden, sollte der Baum selbst schreibgeschützt sein. Also, um sie zu erstellen, habe ich eine Unterklasse, MutableTree
, die Bearbeitungsvorgänge auf einem Tree
ermöglichen sollte.Vererbung mit Generics
Hier ist mein Code:
public class Tree<C,K> implements Serializable {
protected C content;
protected java.util.HashMap<K, Tree<C,K>> nexts;
protected Tree() {}
public C getContent() {
return content;
}
public java.util.Iterator<K> getKeys() {
return nexts.keySet().iterator();
}
public Tree<C,K> descend(K key) {
return nexts.get(key);
}
}
Und für die MutableTree
:
public class MutableTree<C,K> extends Tree<C,K> {
public MutableTree (Tree<C,K> par) {
super();
this.content = par.content;
this.nexts = par.nexts;
}
public MutableTree() {
super();
}
public void setContent (C c) {
this.content = c;
}
public MutableTree<C,K> addKey (K k) {
MutableTree<C,K> noo = new MutableTree<C,K>();
nexts.put(k, noo);
return noo;
}
public boolean delKey (K k) {
return (nexts.remove(k)!=null)?true:false;
}
}
Dieser Code-Schnipsel nicht kompiliert, sondern entscheiden sich zu beschweren, dass Tree.content
und Tree.nexts
geschützt sind. Wie Sie sehen können, sind sie tatsächlich. Da MutableTree
eine Unterklasse von Tree
ist, sollte es nicht Zugriff auf die geschützten Felder seiner Eltern haben?
Danke für jede Hilfe.
Hat Google Guave (oder was auch immer dieses Google Collections-Projekt jetzt heißt) keine Baumstruktur, die Sie verwenden können? – TheLQ
Nicht, dass ich weiß; Ich werde es noch einmal überprüfen. EDIT: Nein, danke. – Actorclavilis
Das kompiliert gut für mich. Sind Ihre Klassen im selben Paket? –