gpt4 book ai didi

java - 尝试在泛型类上实现可比较的接口(interface)时出现绑定(bind)不匹配错误

转载 作者:行者123 更新时间:2023-12-01 23:58:08 25 4
gpt4 key购买 nike

我正在为家庭作业创建一个自定义 PriorityQueue 类,但遇到了障碍。我不知道如何修复 Eclipse 中出现的 Bound Mismatch 错误;它不会让我尝试按照它的说法进行编译:

Bound mismatch: The type K is not a valid substitute for the bounded parameter <K extends Comparable<K>> of the type Entry<K,V>

PriorityQueue.java:

  public class PriorityQueue<K,V> {

private Entry<K,V> _head;
private Entry<K,V> _tail;
private int _size;

public PriorityQueue() {
this._head = null;
this._tail = null;
this._size = 0;
}

public int size() {
return _size;
}

public boolean isEmpty() {
return (size() == 0);
}

public Entry<K,V> min() {
if (_head == null) {
return null;
}
Entry<K,V> current = _head;
Entry<K,V> min = _head;;

while (current != null) {
if (current.compareTo(min) < 0) {
min = current;
}
current = current.getNext();
}
return min;
}

public Entry<K,V> insert(K k, V x) {
Entry<K,V> temp = new Entry<K,V>(k,x);
if (_tail == null) {
_tail = temp;
_head = temp;
}
else {
_tail.setNext(temp);
temp.setPrev(_tail);
_tail = temp;
}
return temp;
}

public Entry<K,V> removeMin() {
Entry<K,V> smallest = min();
smallest.getPrev().setNext(smallest.getNext());
smallest.getNext().setPrev(smallest.getPrev());

return smallest;
}

public String toString() {
return null;
}

public static void main(String[] args) {
PriorityQueue<Integer, Integer> pq =
new PriorityQueue<Integer, Integer>();

pq.insert(4, 2);
pq.insert(5, 1);
pq.insert(1, 5);

System.out.println(pq.min().toString());
}
}

Entry.java:

public class Entry<K extends Comparable<K>,V> implements Comparable<Entry<K,V>> {

private V _value;
private K _key;
private Entry<K,V> _prev;
private Entry<K,V> _next;

public Entry(K key, V value) {
this._value = value;
this._key = key;
this._prev = null;
this._next = null;
}

public V getValue() {
return this._value;
}

public K getKey() {
return this._key;
}

public Entry<K,V> getNext() {
return _next;
}

public void setNext(Entry<K,V> link) {
this._next = link;
}

public Entry<K,V> getPrev() {
return _prev;
}

public void setPrev(Entry<K,V> link) {
this._prev = link;
}

public String toString() {
return "" + this.getValue();
}

@Override
public int compareTo(Entry<K,V> o) {
if (o instanceof Entry<?,?>) {
return this.getKey().compareTo(o.getKey());
}
throw new IllegalArgumentException("Objects are not comparable.");
}


}

最佳答案

你必须让 K 扩展 Comparable也是PriorityQueue :

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

事实上,泛型类型 K 将用于 Entry<K,V> ,并且 Entry 具有必须扩展(实际实现)的约束 Comparable<K> 。您必须告诉编译器 PriorityQueue 的 K 也满足此约束,因此它允许您使用 Entry<K,V> .

如果没有,有人可以将 PriorityQueue 与不会扩展 Comparable 的 K 一起使用,并且编译器必须检查 K 的所有使用,以查看是否没有阻止其使用的约束。

关于java - 尝试在泛型类上实现可比较的接口(interface)时出现绑定(bind)不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286781/

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