Пустой метод в абстрактном классе
-
09-09-2019 - |
Вопрос
Я только что установил PMD для анализа своего Java-проекта.Действительно хороший инструмент, очень рекомендую.В любом случае, я получил несколько ошибок:
«Пустой метод в абстрактном классе должен быть абстрактным»
Я проверил документацию PMD, и в объяснении говорится:
поскольку разработчик может полагаться на эту пустую реализацию, а не на кодирование соответствующей
Итак, я думаю, что понимаю причину этой ошибки стиля кода, но рассмотрим следующий сценарий:У меня есть абстрактный класс Entity.Этот класс имеет логический метод с реализацией по умолчанию.(контролирует, следует ли удалять связанные объекты при удалении).Лишь немногие производные классы переопределяют это поведение по умолчанию на значение true.
Должен ли я удалить реализацию по умолчанию и заставить все производные классы объявлять свое поведение?Вы действительно думаете, что этот шаблон — такая плохая практика?
Уточнение: PMD рассматривает метод с одним оператором возврата как пустой.
Решение
Я думаю, это просто ориентир.Он говорит вам, что вы, возможно, захотите пересмотреть свой дизайн, но если ваш дизайн уже имеет смысл, нет причин подчиняться программному обеспечению, а не своему мозгу.
Другие советы
Если вы используете Java 1.8, вы можете сделать Entity интерфейс вместо абстрактного класса и напишите по умолчанию реализация вашего метода в нем.
public interface Entity {
default boolean yourMethod() {
//default implementation ...
}
}
Вы можете использовать это для справки:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html