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.
Suppress false positives by adding the suppression annotation @SuppressWarnings("Var")
to the enclosing element.