Java - Ayuda: un método público genérico de una clase secundaria no funciona en la clase principal

 
Vista:
Imágen de perfil de Diego

Ayuda: un método público genérico de una clase secundaria no funciona en la clase principal

Publicado por Diego (3 intervenciones) el 22/07/2021 21:46:20
¡Buenas tardes!
En una clase secundaria LabDib2 (dibujo del laberinto) que extiende JPanel, uno de los campos que he definido es ArrayList<Objeto> lisObj, que es la lista dinámica de objetos del laberinto. La clase "Objeto" es otra genérica para usar distintos tipos de objetos en el laberinto. Un campo de esta clase es "obj" de tipo T ( parámetro de la clase genérica "Objeto") y el método get de esta clase es:

public T getObj() {
return obj;
}

En la clase LabDib2 he definido un método público genérico para poder elegir cualquier objeto del laberinto desde la clase principal (JueCoc5). Este método es el siguiente:

public <T> T getLisObj(int n) {
T ob=(T) lisObj.get(n).getObj(); //Línea 393
return ob;
}

JueCoc5 es la clase principal que crea la ventana principal y tiene el método main.
El editor Eclipse no encuentra ningún error de sintaxis. El programa funciona cuando lo ejecuto, pero devuelve un error de ejecución cuando lee la línea 287 de código del método "comeCo" de la clase principal, que es la siguiente:
if ( !(pl.getLisObj(inC) instanceof Vacio)) { // Línea 287. "pl" es la instancia de LabDib2 creada en la clase principal

El error de ejecución es el siguiente:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index 82 out of bounds for length 78
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:373)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at LabDib2.getLisObj(LabDib2.java:393)
at JueCoc5.comeCo(JueCoc5.java:287)


El problema está en la línea 393 del método genérico "getLisObj" de la clase LabDib2.

Por favor, ¿alguien puede ayudarme?
¡Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda: un método público genérico de una clase secundaria no funciona en la clase principal

Publicado por Kabuto (1044 intervenciones) el 23/07/2021 02:00:27
El error es:
1
Index 82 out of bounds for length 78

Eso significa que el ArrayList tiene 78 objetos, pero en algún momento del programa se le está pidiendo un objeto en la posición 82, que obviamente no existe dicha posición porque si tiene 78 objetos, la posición más alta será 77

Esto no es un error de sintaxis como bien dices, es un problema de que en algún punto del programa no se está controlando bien los elementos que se piden.
Es decir, que este método:
1
2
3
4
public <T> T getLisObj(int n) {
T ob=(T) lisObj.get(n).getObj(); //Línea 393
return ob;
}

...en algún momento recibe entre paréntesis el entero 82 y provoca una excepción porque sobrepasa la capacidad del ArrayList.

Así que tú mismo vas a tener que indagar por qué ocurre que en algún momento se recibe un entero tan alto.
Mira a ver de donde proceden los enteros que va a recibir ese método, a ver si así descubres de donde sale ese 82
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego

Ayuda: un método público genérico de una clase secundaria no funciona en la clase principal

Publicado por Diego (3 intervenciones) el 23/07/2021 09:27:44
Buenos dias.
¡Muchas gracias por tu atención y tu respuesta!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar