【发布时间】:2014-02-14 01:46:33
【问题描述】:
我希望能够将方程/算法存储在 java 树结构中,以便我可以轻松检索和操作某些节点。
为了存储方程式,我为运算、关系和逻辑运算创建了三个枚举集:
private enum Operation {
PLUS, MINUS, TIMES, DIVIDE, SIN, COS, TAN
}
private enum Relation {
EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQ, LESS_THAN, LESS_THAN_OR_EQ
}
private enum LogicOperation {
AND, OR, TERNARY
}
我想创建一个树结构,可以容纳任何这些枚举集或任何值。由于树只是来自根节点的节点网络,因此我创建了一个 Node 类,它可以有一个、两个或三个孩子(一个孩子用于三角运算,两个用于算术运算,三个用于三元逻辑):
public class Node<T> {
private T data;
List<Node<T>> nodeChildren = new ArrayList<Node<T>>();
Node(T data) {
this.data = data;
}
public void addChild(Node<T> child) {
this.nodeChildren.add(child);
}
public void addChildren(Node<T> child1, Node<T> child2) {
this.nodeChildren.add(child1);
this.nodeChildren.add(child2);
}
public void addChildren(Node<T> child1, Node<T> child2, Node<T> child3) {
this.nodeChildren.add(child1);
this.nodeChildren.add(child2);
this.nodeChildren.add(child3);
}
public T getData() {
return this.data;
}
public List<Node<T>> getNodeChildren() {
return this.nodeChildren;
}
}
我不擅长泛型,但说我想存储“5 + 5”,我为“+”创建了一个根节点:
Node<Operation> op = new Node(Operation.PLUS);
但是当我尝试添加两个整数类型的孩子时,我得到一个类型不匹配的错误:
op.addChildren(new Node<Integer>(5), new Node<Integer>(5));
有人能指出我正确的方向吗?
谢谢
** 编辑 **
任何有兴趣的人的答案是使用泛型类型?:
List<Node<?>> nodeChildren = new ArrayList<Node<?>>();
【问题讨论】:
标签: java generics types tree structure