В настоящее время я работаю над некоторыми проблемами Findbugs в проекте другого человека.
Это проблема, над которой я работаю:
Корректность - класс определяет поле, маскирующееполе суперкласса
Этот класс определяет поле с тем же именем, что и видимое поле экземпляра в суперклассе.Это сбивает с толку и может указывать на ошибку, если методы обновляют или обращаются к одному из полей, когда они хотят другое.
Существует суперкласс OutputInterface
и подкласс CoreOutputInterface
, который расширяет OutputInterface
.Они оба определяют переменную className
.CoreOutputInterface
также имеет несколько подклассов.
Чтобы устранить проблему, я бы просто удалил className
из подкласса (CoreOutputInterface
), поскольку он уже определен в суперклассе.
Переменная никогда не читается и не устанавливается с помощью super.className
илиthis.className
, только с className
, поэтому, на мой взгляд, это не должно приводить к каким-либо проблемам.
Также на переменную из суперкласса никогда не ссылаются во всем проекте (я проверял ее с помощью ссылочной функции Eclipse).
Кто-нибудь может подтвердить, что это не может привести к проблеме в любой ситуации?
Заранее спасибо за помощь.
OutputInterface:
public abstract class OutputInterface {
protected String className = null;
...
}
CoreOutputInterface:
public abstract class CoreOutputInterface extends OutputInterface {
protected String className = null;
...
public void getClassName() {
return className;
}
public void setClassName(String newName) {
className = newName;
}
...
}