RELOAD系統(http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD)在OHRRPGCE GCS中用作基於樹的數據遏制系統。該系統中的節點可以具有七種類型和任意數量的子節點中的一種。如何在Java中處理多類樹型系統?
目前,我正在爲Java編寫一個類庫以通過泛型來處理RELOAD,但它對我來說感覺像是一團糟。我是對的還是有更高效的方式?
這裏是一個抽象的RELOAD節點代碼:
/**
*
*/
package hamsterwrench.data.reload;
import java.util.ArrayList;
/**
* @author Matt
*
*/
public abstract class ReloadNode<T>{
@SuppressWarnings("rawtypes")
private ArrayList<ReloadNode> children = new ArrayList<ReloadNode>();
private T data;
private long nodeID;
private String name;
protected ReloadNodeType type;
public ReloadNode(long id, String newName){
name = newName;
nodeID = id;
}
public T readData(){
return data;
}
public void writeData(T input){
data = input;
}
public String name(){
return name;
}
public ReloadNodeType type(){
return type;
}
@SuppressWarnings("rawtypes")
public void addChild(ReloadNode r){
children.add(r);
}
public int numberOfChildren(){
return children.size();
}
public boolean removeChild(@SuppressWarnings("rawtypes") ReloadNode r){
return children.remove(r);
}
@SuppressWarnings("rawtypes")
public ReloadNode getChild(int i){
return children.get(i);
}
public ArrayList<String> getChildrenNames(){
ArrayList<String> result = new ArrayList<String>();
for(int i = 0; i < children.size(); i++){
result.add(children.get(i).name());
}
return result;
}
public long ID(){
return nodeID;
}
}
如果家長的類型不限制子元素的類型,我不會看到你能從泛型中獲得什麼。不過,我們必須瞭解如何使用API來更好地判斷它。 – Joni 2012-03-23 20:26:05
你有任何機會參考現有的實現(非Java可能基於規範)?另外,就Java變量而言,列出的8種類型實際上是3:double,int,String。因爲數據是「字符串標記」 - 「數據」格式,所以您可能希望查看各種散列圖。它與json非常相似,但解析出來更加緊湊和複雜。 – Thomas 2012-03-23 20:38:36