Re: Why shouldn't we catch class RuntimeException?
Lew <firstname.lastname@example.org> wrote:
This seems like an extremely potent argument in favor of catching and logging
such exceptions. A programmer should know when they err.
But, such exceptions will abort the application, and leave a trace to where
the abort came from. Many of them can't really be dealt with.
I said "catching and logging". There is no "abort the application" there.
All of them can be dealt with. Why do you think otherwise?
Lets say you have a mathematical model that does matrix and vector
multiplication? If you attempt to multiply two matrices whose dimensions
don't match, then the application might as well just abort because your
math is wrong. There is no way to recover.
Of course there is.
If, however, those matrices where formed from some type of interactive
user interface - then catching the abort would be worthwhile because then
you could inform the user of the mistake, and he could try again. But, the
application probably should have checked the dimensions in the first place....
This is a program bug, yes.
I guess if the mathematical model was in a video game, then you could have
whatever it is you are modeling revert to some default state if you
catch the exception - it would make things look better to the end user.
These types of exceptions shouldn't occur in production code, but if they do,
it's useful to know it, and not have the application crash, which is why you
In the book's defence, it was probably talking about NullPointerException,
ClassCastException, IllegalArgumentException, etc. which can - in many
cases - indeed be avoided.
These are all RuntimeExceptions.
But they aren't all the RuntimeExceptions.
NullPointerException, ClassCastException, and IllegalArgumentException
But they aren't - there are many others as well. For example,
UnsupportedOperationException, and that's just in java.lang! I'm not even
looking at all the standard API, much less all the code everyone is writing.
The set of RuntimeExceptions is likely growing as we speak. How can you say
that those three are all the RuntimeExceptions?