获取Java';s list迭代器以返回对象以外的内容

获取Java';s list迭代器以返回对象以外的内容,java,iterator,linked-list,Java,Iterator,Linked List,我使用Java 我已经为一个名为“Subject”的自定义对象创建了一个类 我有另一个类,它只包含主题对象的链接列表。(称为主题列表) 我在subjectsList类中编写了其中一个方法(称为“getSubject()”),用于返回链接列表中特定索引处的Subject对象。为此,我使用了ListIterator。我将在LinkedList中的给定索引处创建一个ListIterator,并使用.next()方法 但是,ListIterator中的.next()方法只返回java.lang.Obje

我使用Java

我已经为一个名为“Subject”的自定义对象创建了一个类

我有另一个类,它只包含主题对象的链接列表。(称为主题列表)

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

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

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

我试着贬低一个主题,但这似乎失败了,我在某个地方读到,你不能贬低无关的对象

这是我的主修课:

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();
    }
}
import java.util.*;
公共类主题列表
{
//我的主题对象链接列表和列表迭代器
私有链接列表l;
私有列表迭代器itr;
//构造函数,它只创建一个新的空LinkedList
公共主题列表()
{
l=新链接列表();
}
//方法返回LinkedList中特定索引处的Subject对象
公共主题getSubject(字节索引)
{
itr=l.listIterator(索引);
返回itr.next();
}
//方法将新的Subject对象添加到LinkedList
public void addSubject(字符串名称输入,字节级别输入)
{
l、 addLast(新主题(nameInput,levelInput));
}
//方法删除LinkedList中特定索引处的Subject对象
public void removeSubject(字节索引)
{
itr=l.listIterator(索引);
itr.next();
itr.remove();
}
}

所讨论的方法是“getSubject()”方法。

您需要将迭代器声明为:

private ListIterator<Subject> itr;
除了您的问题之外,我在代码中看到了命名约定问题。最好遵循它,养成习惯


注意:在EclipseIDE中尝试了您的示例之后,我对我的答案进行了更改。我建议您使用IDE,因为它也会向您显示有关这类事情的警告。

您可以将泛型用于您的应用程序

私有列表迭代器itr;
现在
itr.next()
返回主题

资源:


PS:我建议您将
LinkedList
的实例化更改为
l=newlinkedlist()

还值得注意的是,许多Java编译器将为
私有ListIterator itr生成警告关于使用原始类型。哦,忘记了构造函数中的…谢谢!在java中,习惯于以大写字母开头类名。这也让其他人更容易阅读您的代码。感谢您指出这一点。为什么您实际上需要
listierator
List.get(index)
List.remove(index)
有什么问题吗?感谢您指出……我不知道命名约定如此重要><现在更改了类名。
l = new LinkedList<Subject>();
public Subject getSubject( byte index )
{
    itr = l.listIterator( index );
    return (Subject)itr.next();
}
private ListIterator<Subject> itr;