Javaで任意のキーを持つ再帰的なツリー構造を実装しようとしています。基本的には、Tree<X,Y>
にはX
以上の(サブ)ツリーがあり、Y
のセットでインデックスされています。しかし、私は、ツリーが読み取り専用ディスクファイル内のデータを索引付けするために使用されるので、ツリー自体は読み取り専用でなければならないと考えています。したがって、それらを作成するために、サブクラスMutableTree
を作成しました。これは、Tree
の編集操作を許可する必要があります。ジェネリックでの継承
は、ここに私のコードです:
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);
}
}
そして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;
}
}
このスニペットはTree.content
とTree.nexts
が保護されていることを文句を代わりに選ぶ、コンパイルされません。ご覧のように、彼らは確かにそうです。しかし、MutableTree
はTree
のサブクラスなので、親の保護されたフィールドにアクセスするべきではないでしょうか?
ありがとうございました。
Google Guave(またはそのGoogle Collectionsプロジェクトが現在呼び出されているもの)には、使用できるツリーがありませんか? – TheLQ
私が知っているわけではありません。もう一度チェックします。編集:いいえ、ありがとう。 – Actorclavilis
それは私にとってうまくコンパイルされます。あなたのクラスは同じパッケージに入っていますか? –