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
A better solution is to invert the default, and assume that all variables are
constant unless they are explicitly declared as modifiable. The
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
Since Java 8 can infer whether a local variable or parameter is effectively
@Var makes it clear whether any variable is non-
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.
Suppress false positives by adding the suppression annotation
@SuppressWarnings("Var") to the enclosing element.