Поле ссылочного типа, get/set (ldfld/stfld), (IIRC), который, как гарантируют, будет атомарным, таким образом, не должно быть никакого риска повреждения здесь. Таким образом, это должно быть ориентировано на многопотоковое исполнение от , что угол, но лично я заблокировал бы данные в более высоком уровне - т.е.
lock(someExternalLock) {
record.Foo = "Bar";
}
или возможно:
lock(record.SyncLock) {
record.Foo = "Bar";
}
Это позволяет Вам делать несколько чтений/обновлений к тому же объект как атомарная операция, так, чтобы другие потоки не могли получить состояние недопустимого объекта
Findbugs имеет одну связанную ошибку шаблон :
IP: параметр не работает при входе в метод, но перезаписанный (IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN)
Начальным значением этого параметра является игнорируется, и параметр перезаписано здесь. Это часто указывает ошибочное мнение, что написать параметр будет передан обратно в вызывающий.
Однако я не думаю, что это отловит случаи, когда вы перезаписываете параметр где-то после чтения параметра.
С другой стороны, похоже, что PMD действительно имеет правило это именно то, что вы ищете:
AvoidReassigningParameters: Переназначение значений параметрам - это сомнительная практика. Используйте временный вместо этого используйте локальную переменную.
И если это не сработает для вас, у специалистов PMD есть список многих других статических программ проверки, как бесплатных, так и коммерческих, которые вы могли бы изучить.