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