Пустой метод в абстрактном классе

Я только что установил PMD для анализа моего проекта Java. Очень хороший инструмент, очень рекомендую. В любом случае, у меня есть несколько ошибок, говорящих:

"пустой метод в абстрактном классе должен быть абстрактным вместо"

Я проверил документацию PMD, и объяснение говорит:

поскольку разработчик может полагаться на эту пустую реализацию, а не на соответствующий код

поэтому я думаю, что понимаю причину за этой ошибкой стиля кода, но рассмотрим следующий сценарий: у меня есть абстрактный класс под названием Entity. Этот класс имеет логический метод с реализацией по умолчанию. (определяет, следует ли удалять связанные объекты после удаления). Только несколько производных классов переопределяют это поведение по умолчанию на true.

должен ли я удалить реализацию по умолчанию и заставить все производные классы объявить свое поведение? Ты действительно думаешь, что эта схема такая плохая? практика?

пояснение: PMD обрабатывает метод с одним оператором return как пустой.

3 ответов


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


когда ваш метод имеет реализацию по умолчанию, то он не пустой ? Или я что-то упустил ?

для меня пустой метод выглядит так:

public void EmptyMethod()
{}

Если вы находитесь на Java 1.8, вы можете сделать Entity интерфейс вместо абстрактного класса и написать по умолчанию для реализации метода в нем.

public interface Entity {
    default boolean yourMethod() {
        //default implementation ...
    }
}

вы можете использовать это для справки : https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html