コードが重複しているテーブルビューがたくさんありました。以前は、AbstractViewクラスを直接継承していました。そこで、これらのテーブルのすべての共通プロパティを保持する新しいクラスとなるAbstractListView(AbstractViewから継承します)を継承させました。
私がその変更を行ったので、このループは奇妙に振る舞っています:
for (AbstractViewPanel view : registeredViews) {
view.modelPropertyChange(evt);
}
次に、arrayListを示します。registeredViews:
private ArrayList<AbstractViewPanel> registeredViews;
デバッガーを実行しましたが、registeredViews arrayListには、テーブルのビューを含むすべてのビューがあります。何らかの理由で、コレクション内の最後の直接継承されたビューで停止し、それらを完全にスキップします。
私のすべての見解は、直接継承していました。
public class someView extends AbstractViewPanel
私の変更以来、いくつかのビューは次のようになっています。
public class someOtherView extends AbstractListView
AbstractListViewは次のとおりです。
public abstract class AbstractListView extends AbstractViewPanel
これがAbstractViewPanelです
public abstract class AbstractViewPanel extends JPanel {
public abstract void modelPropertyChange(PropertyChangeEvent evt);
}
ループは、AbstractListViewを継承するものを単純に通過しませんが、最終的にはすべてのビューがAbstractViewタイプであると想定します。
更新 私はそれが単にループを変更することを含む回避策を見つけることができました:
for (int i = 0; i < registeredViews.size(); i++)
{
registeredViews.get(i).modelPropertyChange(evt);
}
foreachスタイルのループがなぜ私に頭痛の種を与えていたのか知りたいのですが。