Exceptions, wann?

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Die grundsätzliche Entscheidung eine Exception zu werfen oder nicht würde ich daran fest machen ob denn nun in meinem "Ablauf" ein besonderes Ereignis aufgetreten ist welches den "normalen" Fortgang des Ablaufs in störender Weise beeinflusst, so dass der Ablauf nicht mehr die Aufgabe erfüllen kann für die er gedacht war. Dann ist noch die Frage welche Art Exception geworfen werden soll. Ist es eine Ausnahme die der Client sinnvoll behandlen kann? Wenn ja, dann sollte der Typ der Exception eine "Checked Exception" (direkt von java.lang.Exception abgeleitet) sein diese muss nun im weiteren Verlauf behandelt werden (entweder per try{...}catch()... oder per throws). Kann der Aufrufer mit der Ausnahmesituation nichts anfangen dann sollte die Exception eine "unchecked Exception" sein (von java.lang.RuntimeException abgeleitet). Dann ist der Aufrufer nicht mehr dazu gezwungen die Ausnahme zu behandeln (kein try ...catch Block bzw. keine throws-Klausel erforderlich).

HTH,
Gruß Tom
 

Snape

Erfahrenes Mitglied
Hi,
ich sehe meistens dort Exceptions, an denen Nullpointer zurückgegeben werden an Stelle erwarteter/erhoffter Objekte. Was spricht für Exceptions, was für/gegen eine einfache Abfrage auf NULL?
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Wenn dein Ablauf / deine Methode so aufgabaut ist, dass sie mit null Werten keine sinnvolle Arbeit leisten kann bzw. wenn null Werte den normalen Ablauf stören würden ist es besser eine NullPointerException zu werfen. Man könnte nun Argumentieren, dass man doch einfach auf null prüfen könnte und dann gegebenenfalls null oder einen entsprechenden anderen Wert zurück gibt als Indikator, dass etwas schief geganen ist -> eine programmatische Ausnahme aufgetreten ist.... Damit unterläuft man jedoch IMHO die von Java geboten Möglichkeiten der strukturierten Ausnahmebehandlung.

Also einfach gesagt wenn die Methode null Werte sinnvoll behandeln kann reicht ein einfacher null Check. Kann sie es jedoch nicht wäre IMHO eine NullPointerException angebracht.

Gruß Tom