Обнаружение затененного свойства java bean

#java #inheritance #recursion #javabeans #introspection

#java #наследование #рекурсия #javabeans #самоанализ

Вопрос:

Есть ли простой способ (в идеале существующая вспомогательная библиотека) обнаружить затененные атрибуты Java bean, учитывая, что он имеет несколько уровней иерархии?

[C] расширяет [B] расширяет [A]. Затем определяется атрибут [A].FirstName .

Я хочу обнаружить компоненты, где [C].FirstName переопределяется (что, вероятно, является ошибкой разработчика) внутри общего теста JUnit, поэтому такая «труднодоступная ошибка» обнаруживается в процессе сборки.

Примечание: в Eclispe IDE это эквивалентно «Объявление поля скрывает другое поле или переменную» в разделе Java / Compiler / Ошибки / Затенение имен и конфликты.

Комментарии:

1. лучший способ избежать этого — не наследовать. Скорее вы должны объявить иерархию наследования через интерфейсы и составить реализацию с экземплярами «нижних» уровней иерархии.

2. обнаружение таких проблем не является задачей для UnitTest. UnitTests проверяет поведение кода. Наследование не является поведением. Правильным инструментом для обнаружения этого будут findbugs или pmd .

Ответ №1:

Обычно вы не помещаете это в модульный тест, а скорее помещаете что-то вроде Checkstyle в свой процесс сборки интеграции, который будет отмечать ту же проблему.

Комментарии:

1. checkstyle может не получить это, findbugs или pmd были бы лучше.

2. У Checkstyle есть HiddenFieldCheck то, что выглядит так, как будто оно должно работать, но я согласен, что findbugs — это тоже отличная вещь для запуска 🙂