2010-08-28 13 views
5

Uso Java.Obtener el iterador de la lista de Java para devolver algo que no sea el Objeto

Ya tengo una clase para un objeto personalizado llamado "Asunto".

Tengo otra clase que solo contiene una lista vinculada de objetos de asunto. (llamado subjectsList)

Escribí uno de los métodos (llamado "getSubject()") en la clase subjectsList que pretende devolver el objeto Subject a un índice específico en la Lista Vinculada. Para hacer esto, utilicé un ListIterator. Crearía un ListIterator en un índice dado en LinkedList y usaría el método .next().

Sin embargo, el método .next() en un ListIterator solo devuelve un java.lang.Object, aunque quiero que devuelva un objeto Subject.

¿Cómo obtengo ListIterator.next() para devolver un objeto Subject?

He intentado bajar un tema pero esto parece fallar, y he leído en alguna parte que no se pueden derribar objetos no relacionados.

Ésta es mi clase 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(); 
    } 
} 

El método en cuestión es el método "getSubject()".

+0

en Java es la convención para comenzar a nombres de clase con una letra mayúscula. Eso también hace que sea más fácil para otras personas leer tu código. – extraneon

+0

Gracias por señalar eso. – Joshua

+0

¿Por qué realmente necesitas ese 'ListIterator'? ¿Qué pasa con 'List.get (index)' y 'List.remove (index)'? – whiskeysierra

Respuesta

5

tiene que declarar el iterador como:

private ListIterator<Subject> itr; 

Crear también en el objeto LinkedList de la siguiente manera en el constructor:

l = new LinkedList<Subject>(); 

También podría echarlo a Sujeto al regresar como su lista sólo almacena Sujeto objeto. Pero sería mejor definir Iterator como se dijo anteriormente.

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

Además de su problema, veo un problema de denominación de convención en su código. Es mejor seguirlo y hacer un habito.

NOTA: He realizado cambios en mi respuesta después de probar su ejemplo en Eclipse IDE. Le sugiero que use IDE, ya que también le mostrará advertencias sobre tales cosas.

+0

Gracias por señalarlo ... yo no sabía que las convenciones de nombres eran tan importantes>. < nombre de la clase cambiado ahora. – Joshua

4

Puede usar genericity con su ListIterator.

private ListIterator<Subject> itr; 

Ahora itr.next() temas de retorno.

Recursos:

PD: Le sugiero que cambie la creación de instancias de su LinkedList en l = new LinkedList<Subject>();

+0

También vale la pena señalar que una gran cantidad de compiladores de Java producirán una advertencia para 'private ListIterator itr;' sobre el uso de tipos sin formato. –

+0

Oh se olvidó de la en el constructor ... ¡Gracias! – Joshua

Cuestiones relacionadas