allgemein
objekt-orientierter entwurf
programmierung
qualitätssicherung / testen

Programiersprache  Java 
Schwierigkeitsgrad  einfach 
Eingereicht von  Sascha Frick 
Veröffentlicht am  03.02.2005  
Lösung veröffentlicht am   07.02.2005  

Der bugTeaser

public Collection select(ISelector selector) {
  Collection items = getItems();
  Collection result = new ArrayList();
  while (items.iterator().hasNext()) {
    Object element = items.iterator().next();
    if(selector.select(element)) {
      result.add(element); 
    }
  }
  return result;
}

Anmerkungen

Dieser Code ist Teil einer Klasse, die Objekte in einer Collection verwaltet; die Details sind nicht von Interesse. Der Code compiliert, funktioniert aber nicht richtig. Die Lösung ist einfach und offensichtlich. Interessant ist die Frage, was bei der Ausführung geschieht und wie es zu diesem Fehler gekommen ist.

Für Nicht-Java-Programmierer: Collection und Iterator sind Schnittstellen und Teil des Java-Collection-Frameworks. ArrayList ist eine Klasse und ebenfalls Teil des Collection-Frameworks; die Klasse unterstützt die Collection-Schnittstelle.

Eventuell lohnt sich ein Blick in die Java-Dokumentation, dazu in der vorherigen Passage einfach auf die entsprechenden Schnittstellen- bzw. Klassennamen klicken.

Über diesen bugTeaser diskutieren.



#002: Die Makrofalle

Druckbare Version