#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 — это тоже отличная вещь для запуска![]()