我有此链接列表类实现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
中。未在LinkedList中声明ListNode。它是一个独立的类。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
指定为节点node变量的绑定,否则将使用原始类型或类似的内容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;
}
}
最佳答案
因为编译器不知道AnyType
中的LinkedList
与AnyType
中的ListNode
相同
例如,LinkedList<String>
和ListNode<Integer>
都是有效的(满足AnyType
的界限),但是如果LinkedList<String>
正在处理ListNode<Integer>
,则可能会遇到很多问题。
您需要确保ListNode
类中的所有LinkedList
都声明为ListNode<AnyType>
。
旁注,常见的Java约定是使用E
代替AnyType
作为集合中通用元素类型的名称。
关于java - 使用泛型键入不兼容错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36556792/