java:使用泛型时绑定不匹配

时间:2015-07-01 11:37:59

标签: java generics

我正在尝试实现通用二叉树。这是节点类的声明

public abstract class Node<E extends Comparable<E>> {
}

具体节点:

public class BinaryTreeNode extends Node<BinaryTreeNode> implements
        Comparable<BinaryTreeNode> {

    @Override
    public int compareTo(final BinaryTreeNode node) {
        if (this == node) {
            return 0;
        }
        return this.getValue().compareTo(node.getValue());
    }
}

抽象树类

public abstract class BinaryTree<T extends Node<T>> {

    /**
     * TODO.
     */
    public BinaryTree() {

    }

    /**
     * TODO.
     * 
     * @param node TODO
     */
    public abstract void addNode(final T node);

    /**
     * TODO.
     * 
     * @param node TODO
     */
    public abstract void removeNode(final T node);

}

由于Node的T参数,这是我得到绑定不匹配的地方。我试过让它扩展Comparable,但是我似乎无法让它工作。我该如何申报?我想让二叉树能够使用扩展Node的所有类。

这是一棵具体的树:

public class ConcreteBinaryTree extends BinaryTree {

    private Node root;

    @Override
    public void addNode(Node node) {
        // TODO Auto-generated method stub

    }

    @Override
    public void removeNode(Node node) {
        // TODO Auto-generated method stub

    }

}

我如何在此处添加类型参数?

1 个答案:

答案 0 :(得分:5)

您的T课程也需要将Comparable声明为public static abstract class BinaryTree<T extends Node<T> & Comparable<T>> - 您可以使用类型交集:

ConcreteBinaryTree

您的public class ConcreteBinaryTree extends BinaryTree<BinaryTreeNode> { @Override public void addNode(BinaryTreeNode node) { } @Override public void removeNode(BinaryTreeNode node) { } } 课程可能如下所示:

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{ @"fields" : @"id,name,picture.width(100).height(100)"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error) {
             }