
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!
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


0