java - 在java中实例化自界泛型

标签 java generics

可能是一个简单的问题,但由于某种原因我似乎无法这样做。如何从下面的类实例化 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 extends BTNode。

这种结构的原因是我希望能够扩展 BinaryTree 和 BTNode 并让子类调用父类(super class)函数,该函数返回 N 类型的变量,并且 N 是 BTNode 子类的类型,而不是类型BT节点。

我觉得我可能在这里遗漏了一些明显的东西,但我已经进行了广泛的搜索并花了相当多的时间尝试不同的事情,但我仍然无法做到这一点。

感谢任何帮助。

最佳答案

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

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/

相关文章:

java - 如何通过jsp添加css类

java - 在java中打印arraylist中的数组元素

java - 仅 Autowiring 构造函数的某些参数

generics - Scala 的 (2.8) list 如何工作?

powershell - 从 powershell 向集群添加通用服务

java - 如何在 Vaadin Flow 中使用带有 DataProvider 的自定义组合框过滤?

java : mapping the Values from Enumeration to Object

C#.net 4.5 : Generic class inheriting from List with a where constraint

c# - 具有多种返回类型的方法

java - 检索泛型类的 .class 属性