ThrowsCount
Since Checkstyle 3.2
Description
Rationale:
Exceptions form part of a method's interface. Declaring
a method to throw too many differently rooted
exceptions makes exception handling onerous and leads
to poor programming practices such as writing code like
catch(Exception ex)
. 4 is the empirical value which is based
on reports that we had for the ThrowsCountCheck over big projects
such as OpenJDK. This check also forces developers to put exceptions
into a hierarchy such that in the simplest
case, only one type of exception need be checked for by
a caller but any subclasses can be caught
specifically if necessary. For more information on rules
for the exceptions and their issues, see Effective Java:
Programming Language Guide Second Edition
by Joshua Bloch pages 264-273.
ignorePrivateMethods - allows to skip private methods as they do not cause problems for other classes.
Properties
Examples
To configure check:
<module name="Checker">
<module name="TreeWalker">
<module name="ThrowsCount"/>
</module>
</module>
Example:
public class Example1 {
// violation below, 'Throws count is 5 (max allowed is 4)'
public void myFunction() throws CloneNotSupportedException,
ArrayIndexOutOfBoundsException,
StringIndexOutOfBoundsException,
IllegalStateException,
NullPointerException {
}
public void myFunc() throws ArithmeticException,
NumberFormatException,
NullPointerException {
}
private void privateFunc() throws CloneNotSupportedException,
ClassNotFoundException,
IllegalAccessException,
ArithmeticException,
ClassCastException {
}
private void func() throws IllegalStateException,
NullPointerException {
}
}
To configure the check so that it doesn't allow more than two throws per method:
<module name="Checker">
<module name="TreeWalker">
<module name="ThrowsCount">
<property name="max" value="2"/>
</module>
</module>
</module>
Example:
public class Example2 {
// violation below, 'Throws count is 5 (max allowed is 2)'
public void myFunction() throws CloneNotSupportedException,
ArrayIndexOutOfBoundsException,
StringIndexOutOfBoundsException,
IllegalStateException,
NullPointerException {
}
// violation below, 'Throws count is 3 (max allowed is 2)'
public void myFunc() throws ArithmeticException,
NumberFormatException,
NullPointerException {
}
private void privateFunc() throws CloneNotSupportedException,
ClassNotFoundException,
IllegalAccessException,
ArithmeticException,
ClassCastException {
}
private void func() throws IllegalStateException,
NullPointerException {
}
}
To configure the check so that it doesn't skip private methods:
<module name="Checker">
<module name="TreeWalker">
<module name="ThrowsCount">
<property name="ignorePrivateMethods" value="false"/>
</module>
</module>
</module>
Example:
public class Example3 {
// violation below, 'Throws count is 5 (max allowed is 4)'
public void myFunction() throws CloneNotSupportedException,
ArrayIndexOutOfBoundsException,
StringIndexOutOfBoundsException,
IllegalStateException,
NullPointerException {
}
public void myFunc() throws ArithmeticException,
NumberFormatException,
NullPointerException {
}
// violation below, 'Throws count is 5 (max allowed is 4)'
private void privateFunc() throws CloneNotSupportedException,
ClassNotFoundException,
IllegalAccessException,
ArithmeticException,
ClassCastException {
}
private void func() throws IllegalStateException,
NullPointerException {
}
}
Example of Usage
Violation Messages
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
Package
com.puppycrawl.tools.checkstyle.checks.design