Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is "throws Exception" bad practice?

Tags:

java

I'm reviewing code for a colleague and I encounter a piece of code similar to this:

public X Foo1(Y y) throws Exception {
    X result = new X(y);
    result.Foo2();
    return result;
}

I believe there is no need for throws Exception part but I'm having difficulties justifying this. It might make sense if it was more specific Exception(FileNotFound, NoMemory etc.) but as it is I think it is unnecessary. Can someone give me some reasons what problems this can cause and why it is bad practice? Or is this code ok?

like image 466
Caner Avatar asked Nov 01 '11 12:11

Caner


2 Answers

The throws declaration is part of the method contract. You should always be as precise as possible when defining contracts. Saying throws Exception is therefore a bad idea.

It's bad for the same reason it is bad practice to say a method returns an Object when it is guaranteed to return a String.

Furthermore, a caller of the method would necessarily have to catch Exception (unless he want to propagate this ugliness), and catching Exception is also a bad idea. See the answers to this question: Is it a bad practice to catch Throwable?

like image 122
aioobe Avatar answered Oct 12 '22 23:10

aioobe


This forces everybody using this method to handle thrown Exceptions.

Even if you like using checked exceptions (which I don't) this leaves you with no information at all what kind of stuff might go wrong. So you can't really handle it in a meaningful way.

like image 36
Jens Schauder Avatar answered Oct 12 '22 23:10

Jens Schauder