一个很奇怪的泛型问题。?
在编写红黑树的操作时,使用了泛型进行编程。但是在对根节点进行赋值时,却碰到了很奇怪的问题。
下面是定义的红黑树的对象
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 = rbTre优艾设计网_设计e; }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的类型不匹配。
ty_犯二的青春207 11小时前
去掉方法中声明的范型,优艾设计网_设计圈类里已经对T声明过了,再声明1次就变成另外一个范型参数
u_103787426 11小时前
public void leftRoa优艾设计网_设计百科tate(RBNode<T> x)
精彩评论