繁体   English   中英

Java中的通用类型-对象类型不匹配

[英]Generic type-Object type mismatch in java

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

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

2)在get()方法中,我想返回V型,并且您可以看到value变量已经在V型中。 但这给了我“无法将对象转换为V”的错误。 但是temp.value已经是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> ,这些...

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>是文字的-引用类的type参数,而不是任何具体类型。 如果这样做,那么两个错误都会消失。

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

public class Node {

我看到的其他问题:

  • last=root; 似乎在任何构造函数,方法或初始化块之外。
  • 我没有看到isEmpty()方法,但是为了简洁起见,您可能还没有发布它。
  • ifelse条件都不满足, if get()方法需要return语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM