Получить итератор списка Java для возврата чего-либо, кроме Object - PullRequest
5 голосов
/ 28 августа 2010

Я использую Java.

У меня уже есть класс для пользовательского объекта, который называется "Subject".

У меня есть другой класс, который содержит только связанный список объектов Subject. (называемый subjectList)

Я написал один из методов (называемый "getSubject ()") в классе subjectList, который предназначен для возврата объекта Subject по определенному индексу в связанном списке. Для этого я использовал ListIterator. Я бы создал ListIterator по указанному индексу в LinkedList и использовал бы метод .next ().

Однако метод .next () в ListIterator возвращает только 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();
    }
}

Рассматриваемый метод - это метод "getSubject ()".

Ответы [ 2 ]

5 голосов
/ 28 августа 2010

Вы можете использовать универсальность с вашим ListIterator.

private ListIterator<Subject> itr;

Теперь itr.next() возвращайте предметы.

Ресурсы:

PS: Я предлагаю вам изменить экземпляр вашего LinkedList на l = new LinkedList<Subject>();

5 голосов
/ 28 августа 2010

Вы должны объявить свой итератор как:

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, так как он также покажет вам предупреждение о таких вещах.

...