使用泛型键入不兼容错误

时间:2016-04-11 18:46:46

标签: java

我有这个链接列表类实现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;
        }
    }

1 个答案:

答案 0 :(得分:2)

因为编译器不知道AnyType中的LinkedListAnyType中的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 作为集合中通用元素类型的名称。