java 中的泛型类型-对象类型不匹配



我试图创建一个LinkedList类。但我有 2 个问题:

1)Node last=null声明给了我一个原始类型的错误,但在该声明的上面没有类似的错误。4 个相同的声明,但只有最后一个给出错误。

2)在get()方法中,我想返回V类型,如您所见,值变量已经在V类型中。但它给了我"无法将对象转换为 V"错误。但是温度值已经是 V。

public class Linkedlist<V> {
    public class Node <V> {
        private Node next=null;
        private String key;
        private int size;
        private V value=null;
        public Node(V value, String key){
            this.key=key;
            this.value=value;
        }
    }
    Node root=null;
    Node temp=null;
    Node temp1=null;
    Node last=null;
    last=root;
    public void add(V value, String key){
        last.next = new Node(value,key);
        last=last.next;
    }

    public void remove(String key){
        temp=root;
        if(isEmpty())
        System.out.println("list is empty!");
        else{
            if(temp.next!=null){
                if(!temp.next.key.equals(key)){
                    remove(temp.next.key);
                }
                else if(temp.next.key.equals(key)){
                    if(temp.next==last)
                    last=temp;
                    temp.next=temp.next.next;
                }
            }
            else
            System.out.println("there is no such element");
        }
    }

    public V get(String key){
        temp=root;
        if(temp.key.equals(key)){
            if(temp.next!=null)
            get(temp.next.key);
            else
            return null;
        }
        else if(temp.key.equals(key))
        return temp.value;
    }

您的内部类Node是泛型的,但您使用的是类的原始形式。 这意味着返回V的方法会被类型擦除,现在它正在返回Object 。 但是Node类不需要是泛型的。 非static嵌套类(即嵌套类)可以使用其封闭类的泛型类型参数。 因此,请删除Node类定义上的<V>

public class Node {

我看到的其他问题:

  • last=root;似乎在任何构造函数、方法或初始化块之外。
  • 我没有看到isEmpty()的方法,但您可能没有发布它以简洁。
  • get()方法在既不满足if条件也不满足else条件的情况下需要一个return语句。

你提到的两个问题实际上是同一个问题。 给定一个参数化类Node<V>如您声明的那样,这些...

Node root=null;
Node temp=null;
Node temp1=null;
Node last=null;

。都声明原始类型的对象Node 。 其他代码将解释为将它们视为已将其类型参数指定为 Object 。 相反,您应该像这样声明它们:

Node<V> root=null;
Node<V> temp=null;
Node<V> temp1=null;
Node<V> last=null;

其中<V>是文字的 -- 对类的类型参数的引用,而不是任何具体类型。 如果你这样做,那么你的两个错误都会消失。

相关内容

  • 没有找到相关文章

最新更新