2010-12-02 1 views
0

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.

+0

Hat Google Guave (oder was auch immer dieses Google Collections-Projekt jetzt heißt) keine Baumstruktur, die Sie verwenden können? – TheLQ

+0

Nicht, dass ich weiß; Ich werde es noch einmal überprüfen. EDIT: Nein, danke. – Actorclavilis

+0

Das kompiliert gut für mich. Sind Ihre Klassen im selben Paket? –

Antwort

3

Sie können nur auf protected Mitglieder über Referenzen desselben Typs wie Code oder Subtyp zugreifen.

Genauso gut in Ihrem Fall, weil die Erstellung einer MutableTree Client-Code eine vermeintlich unveränderliche Tree mutieren könnte.

+0

Genau dort. Danke vielmals. – Actorclavilis