2010-08-28 24 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

相关问题