我有一堆表视图,其中有重复的代码。他们过去直接继承 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
这是抽象列表视图:
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 样式循环让我头疼。