Как я осуществляю присвоение аргументам использования методов FindBugs?

Поле ссылочного типа, get/set (ldfld/stfld), (IIRC), который, как гарантируют, будет атомарным, таким образом, не должно быть никакого риска повреждения здесь. Таким образом, это должно быть ориентировано на многопотоковое исполнение от , что угол, но лично я заблокировал бы данные в более высоком уровне - т.е.

lock(someExternalLock) {
    record.Foo = "Bar";
}

или возможно:

lock(record.SyncLock) {
    record.Foo = "Bar";
}

Это позволяет Вам делать несколько чтений/обновлений к тому же объект как атомарная операция, так, чтобы другие потоки не могли получить состояние недопустимого объекта

5
задан Raedwald 13 September 2019 в 13:42
поделиться

1 ответ

Findbugs имеет одну связанную ошибку шаблон :

IP: параметр не работает при входе в метод, но перезаписанный (IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN)

Начальным значением этого параметра является игнорируется, и параметр перезаписано здесь. Это часто указывает ошибочное мнение, что написать параметр будет передан обратно в вызывающий.

Однако я не думаю, что это отловит случаи, когда вы перезаписываете параметр где-то после чтения параметра.

С другой стороны, похоже, что PMD действительно имеет правило это именно то, что вы ищете:

AvoidReassigningParameters: Переназначение значений параметрам - это сомнительная практика. Используйте временный вместо этого используйте локальную переменную.

И если это не сработает для вас, у специалистов PMD есть список многих других статических программ проверки, как бесплатных, так и коммерческих, которые вы могли бы изучить.

3
ответ дан 15 December 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: