【问题标题】:java: bound mismatch when using genericsjava:使用泛型时绑定不匹配
【发布时间】:2015-07-01 11:37:58
【问题描述】:

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

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

    }

}

这里需要如何添加类型参数?

【问题讨论】:

    标签: java generics


    【解决方案1】:

    您的BinaryTree 类也需要将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) { }
    }
    

    【讨论】:

    • 感谢您的回复!只是出于好奇:是否也可能没有类型交集?
    • 你可以有两个类型参数 BinaryTree&lt;C extends Comparable&lt;C&gt;, N extends Node&lt;C&gt;&gt; 但这会更冗长,并迫使调用者在声明 BinaryTree 时总是显式放置两个类型参数......我想不出其他选项,但可能有一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多