# IllegalStateException statt UnsupportedOperationException?!



## mKz (8. Mai 2009)

Morgen 
Ich bräuchte mal wieder eure Hilfe 
Wir sollten eine Primfaktorenzerlegung rekursiv implementieren und dazu eine Testklasse schreiben.
Jetzt habe ich folgendes Problem: Meine Klasse implementiert das Interface Iterable. Die habe ich nicht neu definiert, sondern einfach den List-Iterator genommen, allerdings soll bei der Methode public void remove() eine UnsupportedOperationException geworfen werden. Das würde dann bei mir so aussehen: 

```
public void remove() throws UnsupportedOperationException
    {
        throw new UnsupportedOperationException();
    }
```

Bei meinem JUnit-Test wird allerdings immer eine IllegalStateException bei "have.iterator().remove();" (have ist eine Collection(ArrayList), in die die Primfaktoren geschrieben werden) geworfen :/

Ich hoffe ihr könnt mir helfen


----------



## SlaterB (8. Mai 2009)

du kannst um den entsprechenden Java-Code ein try/catch bauen und dir die Exception anschauen,
du kannst vergleichsweise an einer völlig anderen Stelle eine  UnsupportedOperationException werden

wenn JUnit daraus intern letztlich was anderes macht, dann hast du darauf vielleicht keinen Einfluss,
aber genaueres weiß ich nicht


----------



## 0din (8. Mai 2009)

scheuch dein prog doch mal im debug modus durch die gegend
warscheinlich wird der fehler nämlich nicht an der stelle geworfen sondern du hast irgendwo anders den wurm drin


----------



## mKz (8. Mai 2009)

habe ich schon SlaterB, die falsche Exception wird genau bei "have.iterator().remove();" geworfen


----------



## SlaterB (8. Mai 2009)

> Bei meinem JUnit-Test wird allerdings immer eine IllegalStateException bei "have.iterator().remove();" (have ist eine Collection(ArrayList),

die iterator()-Methode von ArrayList bzw. der dort zurückgegebene Iterator ist entscheidend, und der wirft IllegalStateException,

noch mal von vorne bzw. bisher gabs nur falsche Tipps, auch von mir:
warum sollte der Aufruf ArrayList.iterator().remove(); etwas mit einer von dir programmierten remove()-Methode zu tun haben,
wo ist der Zusammenhang?


----------



## mKz (8. Mai 2009)

Nun, ich sollte die Iterator-Methode remove() neu definieren (damit sie bei jedem Aufruf eine UnsuspportedOperationException wirft). Nun möchte ich dies einfach testen. Funktioniert aber leider nicht :/


----------



## SlaterB (8. Mai 2009)

WIE möchtest du sie neu definieren und wie testest du?

eine denkbare Variante wäre, statt ArrayList eine eigene Klasse zu verwenden 
(die vielleicht von ArrayList erbt und lediglich einen neuen Iterator zurückgibt)

einfach so sich was wüschen oder 'irgendwo' definieren hilft nicht unbedingt,
es braucht schon ein schlüssiges Konzept


----------

