foreach 루프에 사용되는 일부 Java 코드를 살펴 보았지만 너무 복잡해 보입니다.Java Iterator를 사용하는 각 루프에 대해
속성을 포함하는 Control.java 파일이 있습니다.
Iterator를 사용하고 Control을 데이터 형식으로 사용하는 Controls.java 파일이 있습니다.
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 루프입니다 . 자바 초보자로서 몇 가지 질문이 떠오른다 :
- 이것을 구현하는 쉬운 방법이 있습니까? 이것이 보통 어떻게 이루어 집니까?
- 이렇게하면 다른 이점이 있습니까?
- ArrayList 및 Iterator없이이 작업을 수행 할 수있는 방법이 있습니까?
"지나치게 복잡하다"고 생각하는 것이 확실하지 않습니다. 'ArrayList'는 반복자를 가지고 있습니다. 그래서'for (SomeType x : list)'라고 말할 수 있습니다. 이'Controls' 클래스는'ArrayList' 반복자를 통해'iterator()'를 구현하기 때문에 for (Control control : controls)는 private'ArrayList' 필드를 통과하는 것과 같습니다. 그 부분은 전혀 복잡하지 않습니다. 'add'와'remove' 메소드는 이것과 아무런 관련이 없습니다. – ajb