2010-12-02 14 views
0

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.contentTree.nextsが保護されていることを文句を代わりに選ぶ、コンパイルされません。ご覧のように、彼らは確かにそうです。しかし、MutableTreeTreeのサブクラスなので、親の保護されたフィールドにアクセスするべきではないでしょうか?

ありがとうございました。

+0

Google Guave(またはそのGoogle Collectionsプロジェクトが現在呼び出されているもの)には、使用できるツリーがありませんか? – TheLQ

+0

私が知っているわけではありません。もう一度チェックします。編集:いいえ、ありがとう。 – Actorclavilis

+0

それは私にとってうまくコンパイルされます。あなたのクラスは同じパッケージに入っていますか? –

答えて

3

protectedメンバーには、コードまたはサブタイプと同じタイプの参照のみでアクセスできます。

MutableTreeを作成すると、クライアントコードはおそらく不変のTreeに変更される可能性があります。

+0

そこに。どうもありがとう。 – Actorclavilis

関連する問題