一个很奇怪的泛型问题。

发布于 2022-09-04 01:42:31 字数 2682 浏览 15 评论 0

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

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女情怀诗 2022-09-11 01:42:31

public void leftRoatate(RBNode<T> x)

去掉方法中声明的范型,类里已经对T声明过了,再声明1次就变成另外一个范型参数

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文