Since Checkstyle 3.2
catch
statement.
Rationale:
catching java.lang.Exception
, java.lang.Error
or
java.lang.RuntimeException
is almost never acceptable.
Novice developers often simply catch Exception in an
attempt to handle multiple exception classes. This unfortunately
leads to code that inadvertently catches NullPointerException
,
OutOfMemoryError
, etc.
name | description | type | default value | since |
---|---|---|---|---|
illegalClassNames | Specify exception class names to reject. | String[] | Error, Exception, RuntimeException, Throwable, java.lang.Error, java.lang.Exception, java.lang.RuntimeException, java.lang.Throwable |
3.2 |
To configure the check:
<module name="Checker"> <module name="TreeWalker"> <module name="IllegalCatch"/> </module> </module>
Example:
class Example1 { void exampleMethod1() { try { // some code here } catch (Exception e) { // violation above, 'Catching 'Exception' is not allowed' } } void exampleMethod2() { try { // some code here } catch (ArithmeticException e) { } catch (Exception e) { // violation above, 'Catching 'Exception' is not allowed' } } void exampleMethod3() { try { // some code here } catch (NullPointerException e) { } catch (OutOfMemoryError e) { } } void exampleMethod4() { try { // some code here } catch (ArithmeticException | NullPointerException e) { } } void exampleMethod5() { try { // some code here } catch (OutOfMemoryError e) { } } }
To configure the check to override the default list with ArithmeticException and OutOfMemoryError:
<module name="Checker"> <module name="TreeWalker"> <module name="IllegalCatch"> <property name="illegalClassNames" value="ArithmeticException,OutOfMemoryError"/> </module> </module> </module>
Example:
class Example2 { void exampleMethod1() { try { // some code here } catch (Exception e) { } } void exampleMethod2() { try { // some code here } catch (ArithmeticException e) { // violation above, 'Catching 'ArithmeticException' is not allowed' } catch(Exception e){ } } void exampleMethod3() { try { // some code here } catch (NullPointerException e) { } catch (OutOfMemoryError e) { // violation above, 'Catching 'OutOfMemoryError' is not allowed' } } void exampleMethod4() { try { // some code here } catch (ArithmeticException | NullPointerException e) { // violation above, 'Catching 'ArithmeticException' is not allowed' } } void exampleMethod5(){ try { // some code here } catch (OutOfMemoryError e) { // violation above, 'Catching 'OutOfMemoryError' is not allowed' } } }
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks.coding