gpt4 book ai didi

java - 为什么它给出的类型参数不在绑定(bind)范围内错误

转载 作者:行者123 更新时间:2023-12-02 10:06:26 25 4
gpt4 key购买 nike

我已经实现了一个红黑树(RBTree类),并且我正在尝试使用该树来实现一个Map类(RBMap类)。

public class RBTree<T extends Comparable<T>> {
private Node<T> root; // The root node of the tree

public class Node<T extends Comparable<T>> {...}
}

我的想法是首先实现一个带有键和值的 Pair 类,并将其用作树中的节点。但即使我实现了 Comparable Interface,它仍然会出现如图所示的错误。

public class RBMap<K,V> {

RBTree<Pair> _root; -> error: type parameter "RBMap.Pair" is not within its bound, should implement 'java.lang.Comparable<RBMap.Pair>'

public class Pair<K extends Comparable<K>, V> implements Comparable<Pair> {
K key;
V value;

@Override
public int compareTo(Pair o) {
return this.key.compareTo((K) o.key);
}

谁能告诉我这里出了什么问题吗?

最佳答案

如果您看到我之前的回答...对此深感抱歉。我的 IDE 包含了 Apache Pair 的导入,所以我认为您以某种方式覆盖了它。然后我意识到你正在自己定义你自己的对。所以我的回答是错误的。

我认为这里的问题是您试图重新定义类型参数 K 和 V。您已经拥有外部类定义的参数。因此内部 Pair 类已经被那些限定了,因为它是在外部类内部定义的。您绝对不想重新定义相同的参数 K 和 V。您可能想定义新参数,例如 Y 和 Z,但我认为您希望它们全部是相同的两种类型。在这种情况下,我想你只是想要:

class RBTree<T extends Comparable<T>> {
public class Node<T extends Comparable<T>> {
T value;
}
}

public class RBMap<K extends Comparable<K>, V> {

RBTree<Pair> pair;

public class Pair implements Comparable<Pair> {
K key;
V value;

@Override
public int compareTo(Pair o) {
return this.key.compareTo((K) o.key);
}
}
}

如果您不确定是否需要限定 Pair 上的类型,请考虑如果您想在另一个类中使用此 Pair 定义,您会做什么。你会这样做:

    RBMap<Integer, Integer>.Pair _pair;

因此,即使在 RBMap 类之外独立使用,您也已经提供了 Pair 对象中使用的两种类型。

关于java - 为什么它给出的类型参数不在绑定(bind)范围内错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com