可能是一个简单的问题,但是由于某种原因,我似乎无法做到这一点。如何从下面的类实例化BinaryTree类型的对象:

public class BinaryTree<N extends BinaryTree.BTNode<N>> {

public static class BTNode<N extends BTNode<N>> {
    public N left;
    public N right;
    public N parent;
}
//some methods which return variables of type N
//or take variables of type N as arguments
}


都:

BinaryTree<BTNode> tree = new BinaryTree<BTNode>();


和:

BinaryTree<BTNode<BTNode>> tree = new BinaryTree<BTNode<BTNode>>();


在Eclipse中生成编译器错误,指出类型BTNode不能有效替代N扩展BTNode的有界参数。

这种结构的原因是,我希望能够扩展BinaryTree和BTNode并具有子类调用超类函数,这些超类函数返回类型N的变量,并且N属于BTNode子类的类型,而不是BTNode类型。

我觉得这里可能缺少明显的东西,但是我进行了广泛的搜索,花了大量时间尝试各种不同的事情,但我仍然无法做到这一点。

任何帮助表示赞赏。

最佳答案

不能完全解决您的问题,但我认为您的问题是由次优设计引起的。保持类型简单!对于二叉树,我希望type参数是树中数据的类型,即节点标签的类型。由于还可以将类型变量用作类型参数,因此这正是您想要的。

public class BinaryTree<E> {

    public static class BTNode<T> {
        public T label;
        public BTNode<T> left;
        public BTNode<T> right;
        public BTNode<T> parent;
    }
    //some methods which return variables of type BTNode<E>.
    //or take variables of type BTNode<E> as arguments
}

关于java - 在Java中实例化自界泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27099994/

10-11 08:56