【发布时间】:2015-03-15 10:10:14
【问题描述】:
所以我一直在查看一些我理解的用于 foreach 循环的 java 代码,但它似乎过于复杂。
我有一个包含属性的 Control.java 文件。
我有一个 Controls.java 文件,它使用 Iterator 并将 Control 作为数据类型。
public class Controls implements Iterable<Control>{
protected ArrayList<Control> controls;
public Controls()
{
controls = new ArrayList<Control>();
}
public Controls(ArrayList<Control> controls)
{
this.controls = controls;
}
public ArrayList<Control> value()
{
return controls;
}
public void add(Control ctrl)
{
this.controls.add(ctrl);
}
public void add(Controls ctrls)
{
for(Control ctrl : ctrls)
{
this.controls.add(ctrl);
}
}
public void remove(Control ctrl)
{
if(this.controls.contains(ctrl))
{
this.controls.remove(ctrl);
} else
{
for (Control c: this.controls)
{
if(c instanceof ContainerControl)
{
((ContainerControl)c).controls.remove(ctrl);
}
}
}
}
public Control get(String name)
{
//stuff here
}
@Override
public Iterator<Control> iterator() {
return controls.iterator();
}
}
其他文件也这样使用它:
public void dumpInstantiation(StringBuffer buf)
{
for(Control control : controls)
{
control.dumpInstantiation(buf);
}
}
据我了解,这只是一个 foreach 循环,具有在迭代每个控件时添加或删除(或调用任何其他方法)的额外好处。作为一个 java 新手,我想到了几个问题:
- 有没有更简单的方法来实现它?这是通常的做法吗?
- 这样做还有其他好处吗?
- 有没有办法在没有 ArrayList 和 Iterator 的情况下做到这一点?
【问题讨论】:
-
我不确定您认为什么是“过于复杂”。
ArrayLists 有迭代器,所以你可以在上面说for (SomeType x : list)。这个Controls类只是通过ArrayList迭代器实现iterator(),所以for (Control control : controls)相当于通过它的私有ArrayList字段。那部分一点也不复杂。add和remove方法与此无关。