Throws Anweisung innerhalb eines Methodenkopfes unklar

Maik.Neumann

Aktives Mitglied
Hallo noch einmal,

Ich verstehe in diesem SourceCode nicht so ganz, warum die Methode "decorateWithBuffer" nicht explizit in ihrem Methodenkopf angeben muss, dass sie eine IllegalArgumentException werfen / erzeugen kann? Warum muss dieses erst im Methodenkopf der Methode "copyBuffered" defineirt werden?

Java:
public void copyBuffered(final InputStream is, final OutputStream os) throws IOException{
		
     final InputStream bufferedIn = decorateWithBuffer(is);
     final OutputStream bufferedOut = decorateWithBuffer(os);
		
     // do something with bufferedIn and bufferedOut

}


public InputStream decorateWithBuffer(final InputStream inStream){
	
     if(inStream == null){
        throw new IllegalArgumentException("inStream darf nicht null sein!");
     }
		
     if(!(inStream instanceof BufferedInputStream)){			
	     return new BufferedInputStream(inStream);			
     }
		
     return inStream;
}

Danke und Gruß
 
Zuletzt bearbeitet:
IllegalArgumentException ist eine unchecked Exception (eine Runtime Exception) und wird nicht explizit geworfen. (Analog zur NPE)

Unchecked Exceptions werden nicht explizit angezeigt. Du solltest in deiner Methode selbst prüfen, dass die Parameter passen
 
Zuletzt bearbeitet:
Hi,
Bei der Methode decorateWithBuffer kann die Exception IllegalArgumentException geworfen werden. Wenn das der Fall ist, siehst du den Text: inStream darf nicht null sein! in der Exception.
Bei der Methode copyBuffered bekommst du nur die Exctption, jedoch ohne irgendwelche weitere Infos.
 
Zuletzt bearbeitet:
ja und?

die IO Exception ist eine checked Exception. Diese MUSS behandelt werden.
die IllegalArgumentException ist unchecked und muss daher nicht behandelt werden.

Jede Methode könnte dauernd Runtime Exceptions werfen - NPEs IAEs oder sonstwas. Das kann man nicht alles dauernd checken - vor allem, sollten diese Exceptions nicht auftreten.

Generell gilt:
Checked Exceptions sind durch irgendwelche Umstände ausserhalb des Programms gegeben (Netzwerkverbindung klappt nicht, Datenbankserver ist down, Festplatte voll, Datei nicht gefunden)
Das ist bekannt, dass diese Sachen auftreten, und man muss sie behandeln.
Unchecked Exceptions treten durch unsaubere Programmierung auf, und sollten nicht behandelt werden. Hier muss die Ursache behoben werden. (Mit Parameter Validation oder null- Prüfung und entsprechender Behandlung, falls etwas null ist.)
 

Zurück
Oben