函数与泛型参数java

时间:2017-02-09 14:13:44

标签: java generics

我有一个对象树,声明为

 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;
            }
        }
}

有办法做到这一点吗?或者我做错了吗?

2 个答案:

答案 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

文档:Lesson: Generics (Updated)