| A setter invoked with a value from the corresponding getter is often a mistake, | |
| for example: | |
| ```java | |
| if (from.hasFrobnicator()) { | |
| to.setFrobnicator(to.getFrobnicator()); | |
| } | |
| ``` | |
| This is easy to accidentally write, but is clearly meant to be, | |
| ```java | |
| if (from.hasFrobnicator()) { | |
| to.setFrobnicator(from.getFrobnicator()); | |
| } | |
| ``` | |
| The Java proto API is tolerant enough that the former code will compile and | |
| execute fine, but it will set `frobnicator` to the default value for that field. | |
| This pattern is occasionally used to ensure that a field is always present, even | |
| if it takes the default value, for example, | |
| ```java | |
| // ensure "always_present" is present | |
| builder.setAlwaysPresent(builder.getAlwaysPresent()); | |
| ``` | |
| This is not a no-op, but we'd encourage being more explicit about the condition, | |
| ```java | |
| if (!builder.hasAlwaysPresent()) { | |
| builder.setAlwaysPresent(false); | |
| } | |
| ``` | |
| Or if `builder` is otherwise untouched, `builder.setAlwaysPresent(false)`. |