![](/img/trans.png)
[英]Error: incompatible types: java.lang.Object cannot be converted to E
[英]incompatible types : java.lang.Object cannot be converted to T
這是我的代碼:
package datastructures;
import java.util.Iterator;
public class Stack<T>{
private class Node<T>{
T data;
Node next;
}
private int size;
private Node head;
private Node newNode(T data){
Node new_node = new Node();
new_node.data = data;
new_node.next = null;
return new_node;
}
public Stack(){
size = 0;
head = null;
}
public T pop() {
if(head == null)
return null;
T ret_val = head.data; //Error here
head = head.next;
this.size--;
return ret_val;
}
}
我在pop方法中收到錯誤,這是錯誤:
Error: incompatible types : java.lang.Object cannot be converted to T
我不理解此錯誤,我不在代碼中的任何地方使用對象。
當您將Node聲明為
private class Node<T>
您要聲明一個通用類型,其中另一個T作為封閉類型中的T。 您正在隱藏T。因此,簡而言之,就好像您在聲明它為
private class Node<E>
只需使用
private class Node
節點的數據字段不知道其類型。
初始化head時,嘗試提供類型。
private Node<T> head;
private Node<T> newNode(T data){
Node new_node = new Node<T>();
new_node.data = data;
new_node.next = null;
return new_node;
}
現在, new_node知道數據字段的類型為T。
您聲明Node
內的類型,其自身的類型參數,那么T
的Node
陰影T
的Stack
,它們有本質的不同類型。
在您的Node
類型中刪除類型參數<T>
聲明(這可能就是您的意思)
(對於Java 8)您可以在Diamond運算符中使用類型化變量:
private Node newNode(T data) {
Node<T> new_node = new Node<>();
new_node.data = data;
new_node.next = null;
return new_node;
}
否則,將泛型初始化為Object
,因此顯示錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.