2012-01-30 92 views
1

嗨,我正在寫一個鏈接列表數據類型。我有一個內部類節點,用於存儲元素和後繼。我目前遇到了我的節點中的getElement和列表中的get方法問題。 這是我在節點返回時泛型如何工作?

public E getElement(){ 
    return this.element; 
} 

其中元素是E元素聲明的實例變量getElement。然而,當我嘗試返回它我得到的方法是這樣

public E get(int index){ 
    Node current; 
    if(index < 0 || index >= size) 
     throw new IndexOutOfBoundsException(); 
    if(index == 0) 
     return head.getElement(); 
    else{ 
     current = head; 
     for(int i = 0; i< index; i++){ 

     current = current.getSuccessor(); 
     } 
     return current.getElement(); 
    } 
    } 

我得到的錯誤不能從對象轉換爲E型我可以破解它周圍,並鍵入其轉換爲一個E,但我覺得有關於泛型的一些潛在的東西,我失蹤了。如果你猜這是爲了做作業,你是對的,並且提前感謝你。

+2

我所看到的^ h omework問題比這個更糟糕。 – 2012-01-30 07:39:04

+0

getElement返回什麼?一個東西? E型? – Adrian 2012-01-30 07:39:51

+0

可以請你發佈全班和內班嗎? – breezee 2012-01-30 07:40:10

回答

9

你可能想Node是通用,所以你不得不

public E get(int index){ 
    if(index < 0 || index >= size) 
    throw new IndexOutOfBoundsException(); 

    Node<E> current = head; 
    for(int i = 0; i < index; i++) { 
    current = current.getSuccessor(); 
    } 
    return current.getElement(); 
} 

(我已經簡化你的代碼一點點在同一時間,特別是在聲明變量是一個好主意。在該點你確實需要他們

Node<E>應該是這樣的:

class Node<E> { 
    private final E element; 
    private Node<E> successor; 

    public Node(E element) { 
     this.element = element; 
    } 

    // etc 
} 
+1

我不能贊同Jon Skeet的回答,因爲我今天沒有投票!詛咒! *再次挫敗... * – blahman 2012-01-30 07:45:14

+1

讓我爲你做到這一點。 – 2012-01-30 07:46:20

+0

你是對的,我確實需要節點是通用的,非常感謝你的雙向飛碟先生 – Erik 2012-01-30 08:00:50

3

假設Node類中通用的,像它應該是你的current變量應該這樣聲明:

Node<E> current; 

這同樣適用於head,你可能有任何其他節點。