Herencia multinivel y bucle Java foreach

Tenía un montón de vistas de tabla que tenían código duplicado en ellas. Solían heredar directamente la clase AbstractView. Entonces los hice heredar AbstractListView (que a su vez heredaría de AbstractView), que sería la nueva clase que contiene todas las propiedades comunes para estas tablas.

Desde que hice ese cambio, este bucle se comporta de manera extraña:

for (AbstractViewPanel view : registeredViews) {
        view.modelPropertyChange(evt);
}

Aquí está el arrayList: certifiedViews:

private ArrayList<AbstractViewPanel> registeredViews;

Ejecuté el depurador y la lista de matriz de vistas registradas tiene todas las vistas, incluidas las de la tabla. Por alguna razón, se detiene en la última vista directamente heredada de la colección y los omite por completo.

Todos mis puntos de vista solían heredar directamente:

public class someView extends AbstractViewPanel

Ahora, desde mi cambio, algunas de las vistas son así:

public class someOtherView extends AbstractListView

Aquí está AbstractListView:

public abstract class AbstractListView extends AbstractViewPanel

Aquí está AbstractViewPanel

public abstract class AbstractViewPanel extends JPanel {


public abstract void modelPropertyChange(PropertyChangeEvent evt);

}

El bucle simplemente no pasa por nada que herede AbstractListView, pero supongo que todas las vistas al final son del tipo AbstractView.

ACTUALIZACIÓN He logrado encontrar una solución alternativa, simplemente implica cambiar el ciclo:

for (int i = 0; i < registeredViews.size(); i++) 
{
        registeredViews.get(i).modelPropertyChange(evt);
}

Sin embargo, me gustaría saber por qué el bucle de estilo foreach me estaba dando dolores de cabeza.

Respuesta 1

Bien, estoy trabajando en un proyecto con la clase abstracta A. Digamos que la clase a1, a2 y a3 todas heredan de la clase A con algunos métodos adicionales que pueden ser únicos para cada subclase. Ahora, estos ...

Tengo un repositorio local donde los artefactos se publican como un repositorio compatible con m2. <nombre del sistema de archivos = "local" m2compatible = "true" local = "true"> <ivy pattern = "$ {ivy.local.default.root} / [...

Estamos desarrollando una aplicación Java que proporciona servicios web a través de SSL. Esta aplicación se está ejecutando en el servidor Tomcat. El propósito de los servicios web es insertar, actualizar y seleccionar datos. Entonces bajo la web ...

Soy un principiante en la programación de Java. Quiero establecerme como programador de Java en una aplicación basada en web. Ahora, al comienzo, quiero desarrollar cms y también quiero obtener datos de otro sitio web, así que estoy ...