| The problem we're trying to prevent is unhelpful stack traces that don't contain |
| information about where the Exception was thrown from. This problem can |
| sometimes arise when an attempt is being made to cache or reuse a Throwable |
| (often, a particular Exception). In this case, consider whether this is really |
| is necessary: it often isn't. Could a Throwable simply be instantiated when |
| needed? |
| |
| ``` {.bad} |
| // this always has the same stack trace |
| static final MyException MY_EXCEPTION = new MyException("something terrible has happened!"); |
| ``` |
| |
| ``` {.good} |
| throw new MyException("something terrible has happened!"); |
| ``` |
| |
| ``` {.good} |
| static MyException myException() { |
| return new MyException("something terrible has happened!"); |
| } |
| ``` |