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