Exceptions are meant to represent the application’s state at the point at which an error occurred.
Making all fields in an Exception
class final
ensures that this state:
- Will be fully defined at the same time the
Exception
is instantiated.
- Won’t be updated or corrupted by a questionable error handler.
This will enable developers to quickly understand what went wrong.
Noncompliant Code Example
public class MyException extends Exception {
private int status; // Noncompliant
public MyException(String message) {
super(message);
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
Compliant Solution
public class MyException extends Exception {
private final int status;
public MyException(String message, int status) {
super(message);
this.status = status;
}
public int getStatus() {
return status;
}
}