一个很奇怪的泛型问题。
在编写红黑树的操作时,使用了泛型进行编程。但是在对根节点进行赋值时,却碰到了很奇怪的问题。
下面是定义的红黑树的对象
public class RBTree<T extends Comparable<T>> {
private RBNode<T> mRoot;
public static final boolean RED = true;
public static final boolean BLACK = false;
public RBNode<T> getmRoot() {
return mRoot;
}
public void setmRoot(RBNode<T> mRoot) {
this.mRoot = mRoot;
}
}
下面是定义的红黑树中节点对象
public class RBNode<T extends Comparable<T>> {
private RBNode<T> left;
private RBNode<T> right;
private RBNode<T> parent;
private boolean color;
private T key;
public RBNode(RBNode<T> left, RBNode<T> right, RBNode<T> parent, boolean color, T key) {
this.left = left;
this.right = right;
this.parent = parent;
this.color = color;
this.key = key;
}
public RBNode<T> getLeft() {
return left;
}
public void setLeft(RBNode<T> left) {
this.left = left;
}
public RBNode<T> getRight() {
return right;
}
public void setRight(RBNode<T> right) {
this.right = right;
}
public RBNode<T> getParent() {
return parent;
}
public void setParent(RBNode<T> parent) {
this.parent = parent;
}
public boolean isColor() {
return color;
}
public void setColor(boolean color) {
this.color = color;
}
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
}
在操作类中对红黑树中某个节点进行左旋的过程中报错
public class RBTreeOperation<T extends Comparable<T>> {
private RBTree<T> rbTree;
public RBTreeOperation(RBTree<T> rbTree) {
this.rbTree = rbTree;
}
public <T extends Comparable<T>> void leftRoatate(RBNode<T> x){
RBNode<T> y = x.getRight();
x.setRight(y.getLeft());
if (y.getLeft() != null){
y.getLeft().setParent(x);
}
y.setParent(x.getParent());
if (x.getParent() == null){
***rbTree.setmRoot(y);***
}else {
if (x.getParent().getLeft() == x){
x.getParent().setLeft(x);
}else {
x.getParent().setRight(x);
}
}
y.setLeft(x);
x.setParent(y);
}
}
在rbTree.setmRoot(y)中报错,y的类型不匹配。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
public void leftRoatate(RBNode<T> x)
去掉方法中声明的范型,类里已经对T声明过了,再声明1次就变成另外一个范型参数