我有一个对象树,声明为
public class Tree<T> {
private Node<T> root;
public Tree(T rootData) {
root = new Node<T>();
root.data = rootData;
root.children = new ArrayList<Node<T>>();
}
public static class Node<T> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
}
}
并希望添加一个函数keepBranch
,它将树缩减为其分支之一。
但我需要keepBranch
将对象T作为参数,以选择分支。
像
public void keepBranch(<T> param) {
for (Node<T> node : this.root.children) {
if (param.equals(node.data)) {
this.root = node;
}
}
}
有办法做到这一点吗?或者我做错了吗?
答案 0 :(得分:4)
将参数类型更改为T
。但是您的比较是错误的,您将值与节点进行比较。更改是将节点的值与param
进行比较:
public void keepBranch(T param) {
for (Node<T> node : this.root.children) {
if (param.equals(node.data)) {
this.root = node;
}
}
}
答案 1 :(得分:2)
应该是T param
而不是<T> param
:
public void keepBranch(T param) {
for (Node<T> node : this.root.children) {
if (param.equals(node.data)) {
this.root = node;
}
}
}
正如评论中所说,它应该是param.equals(node.data)
而不是node == param