Java泛型类型和条目

Java泛型类型和条目,java,generics,Java,Generics,我正在尝试实现一个通用的DDLinkedList条目。我定义了以下类 class DoublyLinkedList<T extends Comparable<T>> class DLLNode<T extends Comparable<T>> Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>> 类双链接列表 类

我正在尝试实现一个通用的DDLinkedList条目。我定义了以下类

class DoublyLinkedList<T extends Comparable<T>> 
class DLLNode<T extends Comparable<T>> 
Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>>
类双链接列表
类DLLNode
条目实现了可比性
尝试创建Entry类型的DoublyLinkedlist数组后,如下所示:

DoublyLinkedList<DLLNode<Entry<K, V>>> array[] = (DoublyLinkedList<DLLNode<Entry<K, V>>>[]) new DoublyLinkedList[TABLE_SIZE];
DoublyLinkedList数组[]=(DoublyLinkedList[])新的DoublyLinkedList[表大小];
我收到一条错误消息:

"The type DLLNode<Entry<K,V>> is not a valid substitute for the bounded
parameter <T extends Comparable<T>> of the type DoublyLinkedList<T>"
“DLLNode类型不是有界
类型为“DoublyLinkedList”的参数
从我的另一个立场来看,我认为我可以做一个通用的T型条目

我的问题:
我这样做的方法是错误的还是实现的方法是错误的?

DLLNode需要实际实现Comparable,而不是将其用作泛型类型

此外,您的语法也有很大的偏差。数组不能使用泛型。您最多只能做到以下几点:

DoublyLinkedList<?> array[] = new DoublyLinkedList[TABLE_SIZE];
DoublyLinkedList数组[]=新的DoublyLinkedList[表大小];

您对
双链接列表的定义是,它必须采用与自身相当的类型。但是您对
DLLNode
的定义没有实现
Comparable
,这意味着
DLLNode
与其自身类型不可比。因此,您不能将
DLLNode
用作
DoublyLinkedList
中的参数类型,您需要执行以下操作:

class DoublyLinkedList<T extends Comparable<? super T>> {}

class DLLNode<T extends Comparable<? super T>> implements Comparable<DLLNode<T>> {
    public int compareTo(DLLNode<T> other) {
        return 0;
    }
}

abstract class Entry<K extends Comparable<? super K>, V> implements Comparable<Entry<K, V>> {}

class HashEntry<K extends Comparable<? super K>, V> extends Entry<K, V> {
    public int compareTo(Entry<K, V> other) {
        return 0;
    }
}

class-DoublyLinkedList
new-DoublyLinkedList[TABLE_SIZE]
是一个编译器错误。初始化数组时不能使用泛型。我会修正关于语法的旁注,但我认为我的解决方案仍然是正确的。数组可以使用泛型,它们不能被泛型实例化。OP实际上是把那个部分做对了;p@Radiodef如果它们不能以这种方式实例化,那么以这种方式声明它们又有什么意义呢?我个人认为,与其假装检查过,不如表现出未检查过,但总有一些情况下你需要捂住鼻子这样做。请澄清你到底想做什么。为什么要尝试创建一个链表数组?看见试着用一个更具体的代码示例和解释来更新这个问题,它能更清楚地说明问题。事实上,我们只能解释编译器错误。
new DoublyLinkedList[TABLE\u SIZE]
是一个编译器错误。谢谢。这肯定是我的问题之一。但是,现在在K上,当我尝试创建数组时,会给出一条
绑定不匹配的错误消息:类型K不是HashEntry类型的绑定参数的有效替代品
@user2390775此新的编译器错误是由于您没有向我们展示的代码中的声明造成的。
DoublyLinkedList<DLLNode<HashEntry<K, V>>> array[] = new DoublyLinkedList[TABLE_SIZE];