0
我试图用Java中的任意键实现递归树结构。基本上我想要的是一个Tree<X,Y>
其中包含一个X
和更多(子)树,由一组Y
s索引。但是,我认为,因为树将用于索引只读磁盘文件中的数据,所以树本身应该是只读的。所以,为了创建它们,我创建了一个子类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 2010-12-02 01:58:17
不是我所知道的;我会再检查一次。编辑:不,谢谢。 – Actorclavilis 2010-12-02 02:02:03