我有这个链接列表类实现LinkedList
,其中包含方法getMode
public class LinkedList<AnyType extends Comparable<? super AnyType>>
{
//Some code...
public AnyType mode(){
//Some code...
ListNode node;
AnyType mode;
mode = node.element;
return mode;
}
}
通用变量AnyType是此链接列表类中的类型绑定。相同的变量绑定在另一个类ListNode
中。 ListNode未在LinkedList中声明。这是一个独立的班级。
class ListNode<AnyType extends Comparable<? super AnyType>>
{
//Some code...
public AnyType element;
}
我想知道为什么链表类中的行
mode = node.element;
给我一个类型不相容错误
>Required AnyType
Found java.lang.Comparable < >
泛型AnyType
变量的类型边界在节点类和链表类中都是相同的,所以我不明白为什么在这里应该有类型不兼容性。
类型绑定始终为
<AnyType extends Comparable<? super AnyType>>
修改
有人提到了似乎有效的解决方案。我必须在AnyType
方法中将getMode
指定为节点节点变量的边界,否则使用原始类型或类似的
public class LinkedList<AnyType extends Comparable<? super AnyType>>
{
//Some code...
public AnyType mode(){
//Some code...
ListNode<AnyType> node; // <--- here
AnyType mode;
mode = node.element;
return mode;
}
}
答案 0 :(得分:2)
因为编译器不知道AnyType
中的LinkedList
与AnyType
中的ListNode
相同
例如,LinkedList<String>
和ListNode<Integer>
都有效(满足AnyType
上的边界),但如果LinkedList<String>
是ListNode<Integer>
,您可能会遇到一系列问题处理ListNode
s。
您需要确保LinkedList
类中的所有ListNode<AnyType>
都声明为E
。
旁注,常见的Java约定是使用AnyType
而不是$ hg clone https://bitbucket.org/multicoreware/x265
$ cd x265/build/linux
$ ./make-Makefiles.bash
$ make
作为集合中通用元素类型的名称。