2016-06-16 238 views
0

這裏是我的代碼:不兼容的類型:java.lang.Object中無法轉換至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 

我不明白這個錯誤,我沒有在我的代碼中的任何地方使用Object。

回答

4

在聲明節點作爲

private class Node<T> 

你在宣告封閉類型的泛型類型與其他T作爲噸。你躲在T.因此,簡而言之,這是因爲如果你是它聲明爲

private class Node<E> 

只需使用

private class Node 
0

節點的數據字段不知道它的類型。

嘗試給出初始化時的類型

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的。

0

您聲明Node內的類型,其自己的類型參數的Node陰影StackT所以T,它們有本質的不同類型。在Node型類型參數<T>

刪除聲明(這可能是你的意思吧)

0

(對於Java 8)你可以使用一個類型變量與鑽石操作:

private Node newNode(T data) { 
    Node<T> new_node = new Node<>(); 
    new_node.data = data; 
    new_node.next = null; 
    return new_node; 
} 

否則,該仿製品將被初始化爲Object,因此會顯示錯誤。

相關問題