63 lines
1.9 KiB
Plaintext
63 lines
1.9 KiB
Plaintext
An exception in a ``++throws++`` declaration in Java is superfluous if it is:
|
|
|
|
* listed multiple times
|
|
* a subclass of another listed exception
|
|
* completely unnecessary because the declared exception type cannot actually be thrown
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
void foo() throws MyException, MyException {} // Noncompliant; should be listed once
|
|
void bar() throws Throwable, Exception {} // Noncompliant; Exception is a subclass of Throwable
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
void foo() throws MyException {}
|
|
void bar() throws Throwable {}
|
|
----
|
|
|
|
|
|
== Exceptions
|
|
|
|
The rule will not raise any issue for exceptions that cannot be thrown from the method body:
|
|
|
|
* in overriding and implementation methods
|
|
* in interface ``++default++`` methods
|
|
* in non-private methods that only ``++throw++``, have empty bodies, or a single return statement.
|
|
* in overridable methods (non-final, or not member of a final class, non-static, non-private), if the exception is documented with a proper JavaDoc
|
|
|
|
Also, the rule won't raise issues on ``++RuntimeException++``, or one of its descendants, because explicating runtime exceptions which could be thrown can ultimately help the method's users, and can even be considered as good practice.
|
|
|
|
----
|
|
class A extends B {
|
|
@Override
|
|
void doSomething() throws IOException {
|
|
compute(a);
|
|
}
|
|
|
|
public void foo() throws IOException {}
|
|
|
|
public void qix() throws MyRuntimeException {}
|
|
|
|
protected void bar() throws IOException {
|
|
throw new UnsupportedOperationException("This method should be implemented in subclasses");
|
|
}
|
|
|
|
Object foobar(String s) throws IOException {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @throws IOException Overriding classes may throw this exception if they print values into a file
|
|
*/
|
|
protected void print() throws IOException { // no issue, method is overridable and the exception has proper javadoc
|
|
System.out.println("foo");
|
|
}
|
|
}
|
|
----
|
|
|