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.
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
Pas que je sache; Je vais vérifier à nouveau. EDIT: non, merci. – Actorclavilis
Cela compile bien pour moi. Vos cours sont-ils dans le même paquet? –