Why is this an issue?
There are several reasons for a method not to have a method body:
- It is an unintentional omission, and should be fixed to prevent an unexpected behavior in production.
- It is not yet, or never will be, supported. In this case an
UnsupportedOperationException
should be thrown.
- The method is an intentionally-blank override. In this case a nested comment should explain the reason for the blank override.
Noncompliant code example
public void doSomething() {
}
public void doSomethingElse() {
}
Compliant solution
@Override
public void doSomething() {
// Do nothing because of X and Y.
}
@Override
public void doSomethingElse() {
throw new UnsupportedOperationException();
}
Exceptions
This does not raise an issue in the following cases:
- Non-public default (no-argument) constructors
- Public default (no-argument) constructors when there are other constructors in the class
- Empty methods in abstract classes
- Methods annotated with
@org.aspectj.lang.annotation.Pointcut()
public abstract class Animal {
void speak() { // default implementation ignored
}
}