Система RELOAD (http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD) используется в GCS OHRRPGCE в качестве системы защиты данных на основе дерева. Узел в этой системе может иметь один из семи типов и любое количество детей.Как обрабатывать многотипную древовидную систему в Java?
В настоящее время я пишу библиотеку сортов для Java для обработки RELOAD через дженерики, но для меня это похоже на kludge. Я делаю это правильно или есть более эффективный способ?
Вот код для абстрактного узла 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
Если у вас есть ссылка на существующую реализацию (не-java, вероятно, основанная на спецификации)? Кроме того, что касается переменных Java, то перечисленные 8 типов фактически представляют собой 3: double, int, String. Вы можете захотеть просмотреть хэш-карту, поскольку данные находятся в формате «String tag» - «data». Это очень похоже на json, но более компактно и сложно разобрать. – Thomas