获取Java的列表迭代器以返回除Object之外的其他内容

时间:2010-08-28 07:56:23

标签: java iterator linked-list

我使用Java。

我已经有一个名为“Subject”的自定义对象的类。

我有另一个只包含Subject对象链接列表的类。 (称为subjectList)

我在subjectsList类中编写了一个方法(称为“getSubject()”),用于返回链接列表中特定索引处的Subject对象。为此,我使用了ListIterator。我将在LinkedList中的给定索引处创建一个ListIterator,并使用.next()方法。

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

如何让ListIterator.next()返回Subject对象?

我已经尝试向主题转播,但这似乎失败了,我在某处读到你不能低估不相关的对象。

这是我的subjectList类:

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()”方法。

2 个答案:

答案 0 :(得分:5)

您需要将迭代器声明为:

private ListIterator<Subject> itr;

还在构造函数中创建如下的LinkedList对象:

l = new LinkedList<Subject>();

您还可以在返回时将其强制转换为主题,因为您的列表仅存储Subject对象。但如前所述定义Iterator会更好。

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

除了您的问题,我在您的代码中看到了命名约定问题。最好是遵循它并做一个习惯。

注意:在Eclipse IDE中尝试您的示例后,我对我的答案进行了更改。我建议你使用IDE,因为它也会告诉你这些事情的警告。

答案 1 :(得分:5)

您可以在ListIterator上使用通用性。

private ListIterator<Subject> itr;

现在itr.next()返回主题。

资源:

PS:我建议您将LinkedList的实例化更改为l = new LinkedList<Subject>();