Пустой метод в абстрактном классе - PullRequest
8 голосов
/ 16 апреля 2009

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

«Пустой метод в абстрактном классе должен быть абстрактным»

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

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

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

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

Пояснение: PMD рассматривает метод с одним оператором возврата как пустой.

Ответы [ 2 ]

10 голосов
/ 16 апреля 2009

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

0 голосов
/ 01 сентября 2016

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

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

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

...