2010-12-02 7 views
0

J'essaie d'implémenter une structure arborescente récursive avec des clés arbitraires en Java. Fondamentalement ce que je veux est d'avoir un Tree<X,Y> qui détient un X et plus (sub) arbres, indexés par un ensemble de Y s. Cependant, je pense que puisque les arbres seront utilisés pour l'indexation des données dans un fichier disque en lecture seule, l'arbre lui-même devrait être en lecture seule. Donc, afin de les créer, j'ai fait une sous-classe, MutableTree, qui devrait permettre les opérations d'édition sur un Tree.Héritage avec génériques

Voici mon 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); 
    } 
} 

Et pour la 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; 
    } 

}

Cet extrait ne compile pas, optant plutôt pour se plaindre que Tree.content et Tree.nexts sont protégés. Comme vous pouvez le voir, ils le sont en effet. Cependant, comme MutableTree est une sous-classe de Tree, ne devrait-elle pas avoir accès aux champs protégés de ses parents?

Merci pour toute aide.

+0

Est-ce que Google Guave (ou tout autre projet Google Collections n'est pas appelé maintenant) ne dispose pas d'un arbre que vous pouvez utiliser? – TheLQ

+0

Pas que je sache; Je vais vérifier à nouveau. EDIT: non, merci. – Actorclavilis

+0

Cela compile bien pour moi. Vos cours sont-ils dans le même paquet? –

Répondre

3

Vous pouvez uniquement accéder aux membres protected à travers des références du même type que votre code ou sous-type.

Tout aussi bien dans votre cas, car la création d'un MutableTree permettrait au code client de muter un Tree supposé immuable.

+0

Juste là. Merci beaucoup. – Actorclavilis

Questions connexes