2010-08-28 52 views
5

我使用Java。獲取Java的列表迭代器以返回除Object以外的東西

我已經有一個名爲「Subject」的自定義對象的類。

我有另一個只包含主題對象的鏈接列表的類。 (稱爲subjectsList)

我在subjectsList類中編寫了其中一種方法(稱爲「getSubject()」),用於在鏈接列表中的特定索引處返回Subject對象。爲此,我使用了一個ListIterator。我將在LinkedList中的給定索引處創建一個ListIterator並使用.next()方法。

但是,ListIterator中的.next()方法僅返回一個java.lang.Object,即使我希望它返回一個Subject對象。

如何讓ListIterator.next()返回一個Subject對象?

我試過向某個主題向下轉發,但這似乎失敗了,而且我在某處讀到了無法向下轉換不相關的對象。

這是我subjectsList類:

import java.util.*; 
public class subjectsList 
{ 
    //my LinkedList of Subject objects and a ListIterator 
    private LinkedList<Subject> l; 
    private ListIterator itr; 

    //constructor that simply creates a new empty LinkedList 
    public subjectsList() 
    { 
     l = new LinkedList(); 
    } 

    //Method to return the Subject object at a specific index in the LinkedList 
    public Subject getSubject(byte index) 
    { 
     itr = l.listIterator(index); 
     return itr.next(); 
    } 

    //Method to add a new Subject object to the LinkedList 
    public void addSubject(String nameInput, byte levelInput) 
    { 
     l.addLast(new Subject(nameInput, levelInput)); 
    } 

    //Method to remove the Subject object at a specific index in the LinkedList 
    public void removeSubject(byte index) 
    { 
     itr = l.listIterator(index); 
     itr.next(); 
     itr.remove(); 
    } 
} 

的方法,問題是 「getSubject()」 方法。

+0

在java中它是開始一個類名的約定大寫字母。這也使得其他人更容易閱讀你的代碼。 – extraneon 2010-08-28 08:16:46

+0

謝謝你指出。 – Joshua 2010-08-28 08:33:35

+0

爲什麼你實際上需要'ListIterator'? 「List.get(index)'和'List.remove(index)'有什麼問題? – whiskeysierra 2010-08-28 10:18:38

回答

5

你需要聲明你的迭代爲:

private ListIterator<Subject> itr; 

還可以創建你的LinkedList對象作爲構造函數如下:

l = new LinkedList<Subject>(); 

你也可以將它轉換爲主題,而返回的列表只存儲主體對象。但如前所述,定義迭代器會更好。

public Subject getSubject(byte index) 
{ 
    itr = l.listIterator(index); 
    return (Subject)itr.next(); 
} 

除了你的問題,我看到你的代碼中的命名約定問題。最好跟着它,做個習慣。

注意:在Eclipse IDE中嘗試您的示例後,我對答案進行了更改。我建議你使用IDE,因爲它也會告訴你有關這些事情的警告。

+0

感謝您指出......我不知道命名約定如此重要>。< 現在更改了類名稱。 – Joshua 2010-08-28 09:10:01

4

您可以使用ListIterator的通用性。

private ListIterator<Subject> itr; 

現在itr.next()返回科目。

資源:

PS:我建議你改變你的LinkedList的實例爲l = new LinkedList<Subject>();

+0

值得注意的是,很多Java編譯器都會對'private ListIterator itr;'產生一個關於使用原始類型的警告。 – 2010-08-28 08:09:45

+0

哦,忘記了構造函數中的 ......謝謝! – Joshua 2010-08-28 08:23:37

相關問題