Jelenlegi hely

18.5 Saját kivétel osztályok létrehozása

Amikor szükségessé válik egy kivétel dobása, az egyik lehetőség egy valaki által már megírtat használni – a Java Platform rengeteg kivétel osztállyal van ellátva – vagy magunk is tudunk írni a céljainknak megfelelőt.

Saját kivétel osztályt kell írnunk, ha a következő kérdések bármelyikére igennel válaszolhatunk. Különben valószínűleg egy valaki más által megírtat kell használnunk.

  • Olyan típusú kivétel osztályra van-e szükség, ami nem áll rendelkezésre a Java Platformban?
  • Fog segíteni a felhasználóknak, ha képesek lesznek megkülönböztetni a mi kivételeinket a mások által megírt kivételosztályoktól?
  • A kódunk több helyen fog-e kivételt dobni?
  • Ha valaki más kivételeit használjuk, a felhasználó hozzá fognak-e tudni férni azokhoz a kivételekhez?
  • Egy hasonló kérdés: a csomagunknak függetlennek és önállónak kell-e lennie?

Tegyük fel, hogy írtunk egy láncolt lista osztályt, amit szeretnénk megosztani nyílt forrású programként. A láncolt lista osztályunk többek között a következő metódusokat támogatja:

objectAt(int n)

Visszaadja a lista n-dik pozíciójában levő objektumot. Kivételt dob, ha a paraméter kisebb, mint 0, vagy nagyobb, mint az aktuális objektumok száma a listában.

firstObject()

Visszaadja az első objektumot a listában. Kivételt dob, ha a lista nem tartalmaz objektumot.

indexOf(Object o)

Átnézi a listát egy speciális objektumért és visszaadja a pozícióját a listában. Kivételt dob, ha az objektum nincs a listában.

A láncolt lista osztály képes különböző kivételeket dobni, ugyanakkor lehetőséget ad arra is, hogy a felhasználó program el tudja kapni a láncolt lista által dobott összes kivételt egy kivételkezelővel. Ha a láncolt listánkat egy csomagban tervezzük megosztani, minden kapcsolódó kódnak egy közös csomagban kell lennie.

A következő ábra illusztrál egy lehetséges osztályhierarchiát a láncolt listák által dobható kivételekről:

Linked List Exception

Szülőosztály választása

Az Exception valamennyi leszármazott osztályát lehet a LinkedListException szülőosztályának választani. Azonban könnyen látható, hogy ezek a leszármazott osztályok nem odaillők, mert vagy túl specializáltak, vagy nem függnek össze a LinkedListException-al. Ezért a LinkedListException szülő osztályának az Exception-nek kell lennie.

A legtöbb applet és alkalmazás, amit írunk, Exception objektumokat dob.

Figyelem: az olvasható kód érdekében egy jó gyakorlat, hogy hozzáfűzzük az Exception szót minden osztály nevéhez, amelyik közvetlenül vagy közvetve öröklődik az Exception osztályból.