Ошибка в контрольном стиле «Метод не предназначен для расширения»? - PullRequest
31 голосов
/ 25 апреля 2011

Я использую Checkstyle и получаю ошибку об этом методе:

public final String getAdmitCodeStatus() {
    return admitCodeStatus;
}

Вот ошибка, которую я получаю:

Метод 'getAdmitCodeStatus' не предназначен для расширения- должен быть абстрактным, окончательным или пустым.

Как этот метод не соответствует?Есть ли что-то, что я делаю неправильно, что Checkstyle будет лаять на меня об этом методе?

Ответы [ 3 ]

31 голосов
/ 16 апреля 2012

Кажется, это вызвано правилом DesignForExtension.Согласно документации :

Проверяет, что классы предназначены для расширения.Точнее говоря, он применяет стиль программирования, в котором суперклассы предоставляют пустые «крючки», которые могут быть реализованы подклассами.

Точное правило состоит в том, что неприватные, нестатические методы классов, которые могут быть разделены на подклассы, должны быть либо

abstract or
final or
have an empty implementation

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

Источник: http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html

Но так как ваш метод имеет модификатор final, я бы сказал, что вы нашли ошибку и, возможно, захотите записать отчет об ошибке.https://github.com/checkstyle/checkstyle/issues

1 голос
/ 16 октября 2013

На первый взгляд, похоже, что это за стиль программирования ... Это просто проверяет, планируете ли вы наследовать методы или нет ... и затем вы можете объявить их final,abstract or empty implementation. Тогда ты объявляешь это окончательным ...;) Либо класс может быть конечным, либо методы индивидуальными в зависимости от сценария требования.

0 голосов
/ 05 декабря 2016

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

...