Exceptions are meant to represent the application's state at which an error occurred.
Making all fields final ensures that this state:
This will enable developers to quickly understand what went wrong.
The following code:
public class MyException extends Exception { private int status; // Non-Compliant public MyException(String message) { super(message); } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } }
should be refactored into:
public class MyException extends Exception { private final int status; // Compliant public MyException(String message, int status) { super(message); this.status = status; } public int getStatus() { return status; } }