| |
| Most references are never modified, and accidentally modifying a reference is a |
| potential source of bugs. |
| |
| One option for avoiding accidental modification is to annotate all variables |
| that are not modified as `final`. However that approach is very noisy, since |
| most variables are never modified, and accidental modification is only avoided |
| if you remember to add `final` everywhere. |
| |
| A better solution is to invert the default, and assume that all variables are |
| constant unless they are explicitly declared as modifiable. The `@Var` |
| annotation provides a way to mark variables as modifiable. The accompanying |
| Error Prone check enforces that all modifiable parameters and local variables |
| are explicitly annotated with `@Var`. |
| |
| Since Java 8 can infer whether a local variable or parameter is effectively |
| `final`, and `@Var` makes it clear whether any variable is non-`final`, |
| explicitly marking local variables and parameters as `final` is discouraged. |
| |
| The annotation can also be applied to fields to indicate that the field is |
| deliberately non-final, but the use of @Var on fields is not required. |