优艾设计网

一个很奇怪的泛型问题。?

优艾设计网 https://www.uibq.com 2023-01-28 07:42 出处:网络 作者:在线设计
在编写红黑树的操作时,使用了泛型进行编程。但是在对根节点进行赋值时,却碰到了很奇怪的问题。 下面是定义的红黑树的对象 public class RBTree<T extends Comparable<T>> {private RBNode<T> mR

在编写红黑树的操作时,使用了泛型进行编程。但是在对根节点进行赋值时,却碰到了很奇怪的问题。

下面是定义的红黑树的对象

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)


0

精彩评论

暂无评论...
验证码 换一张
取 消