blob: d5f86bfbb26bbfb314e0df95da2b306d5137b9db [file] [log] [blame] [view] [edit]
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.