[英]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()
方法,但是为了简洁起见,您可能还没有发布它。 if
和else
条件都不满足, if
get()
方法需要return
语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.