У меня проблема с объединением дженериков, implements
и внутренних классов. Я создаю класс LinkedBinaryHeap
, который содержит внутренний класс. Этот внутренний класс является общим HeapNode
, который расширяет общий класс Node
, который я создал; он просто добавляет переменную и методы для ключа/приоритета.
В LinkedBinaryHeap
я создаю общий LinkedList
для хранения HeapNode
. Я предполагаю, что общие хранящиеся данные расширяют класс Comparable
.
Вот схема того, что хранит что:
BinaryHeap->LinkedList(Nodes)->HeapNode(extends Node)->DATA,KEY
Моя проблема в том, что при объявлении LinkedList
:
LinkedList<HeapNode> heap;
eclipse подчеркивает HeapNode
и выдает ошибку:
Bound mismatch: The type LinkedBinaryHeap.HeapNode is not a valid substitute for the bounded parameter > of the type LinkedList
Я думаю, ошибка говорит мне, что HeapNode
должен реализовать Comparable
, однако мой класс Node
реализует Comparable
, так что об этом позаботились, верно?
Я пробовал разные вещи, но, похоже, ничего не работает, приведенный ниже код ближе всего к тому, что я нашел. Обратите внимание, что я пробовал оставить implements Comparable Node<T>
вне внутреннего класса HeapNode
, и это ничего не меняет.
Код:
LinkedBinaryHeap.java:
public class LinkedBinaryHeap<E extends Comparable<E>> {
private LinkedList<HeapNode> heap;
public LinkedBinaryHeap(){
heap = new LinkedList<HeapNode>();
}
/* INNER CLASS DECLARATION. */
private class HeapNode extends Node<E> implements Comparable<Node<E>>{
int key;
public HeapNode(int key, E data){
super(data);
this.key = key;
}
public int getKey(){
return key;
}
public void setKey(int key){
this.key = key;
}
}
}
Узел.java:
public class Node<T extends Comparable<T>> implements Comparable<Node<T>>{
protected T data;
protected Node<T> next;
protected Node<T> previous;
public Node(T data){
next = null;
previous = null;
this.data = data;
}
/* Some other methods left out here. */
public int compareTo(Node<T> node) {
return data.compareTo(node.getData());
}
}
Связанный список.java:
public class LinkedList<T extends Comparable<T>> implements Comparable<LinkedList<T>>{
private Node<T> head;
private Node<T> tail;
private int size;
public LinkedList(){
head = null;
tail = null;
size = 0;
}
/* Other methods left out. */
public int compareTo(LinkedList<T> list){
// does stuff.
}
}
LinkedList
иNode
нужно реализовать Comparable? Это действительно очень неудобно, когда все так ограничено везде. - person Radiodef   schedule 22.02.2015