我有此链接列表类实现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中的LinkedListAnyType中的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/

10-09 07:55