Checkstyleを使用していて、このメソッドに関するエラーが発生します。
public final String getAdmitCodeStatus() {
return admitCodeStatus;
}
ここに私が得るエラーがあります:
メソッド「getAdmitCodeStatus」は拡張用に設計されていません-抽象、最終、または空である必要があります。
その方法はどのように準拠していませんか? Checkstyleがこの方法について私に怒鳴るという私が間違っていることはありますか?
DesignForExtension
ルールが原因であると思われます。 ドキュメント によると:
クラスが拡張用に設計されていることを確認します。具体的には、スーパークラスがサブクラスによって実装できる空の「フック」を提供するプログラミングスタイルを適用します。
正確なルールは、サブクラス化できるクラスの非プライベートで非静的なメソッドは、
abstract or final or have an empty implementation
理論的根拠:このAPI設計スタイルは、スーパークラスをサブクラスによって壊されることから保護します。欠点は、サブクラスの柔軟性に制限があることです。特に、スーパークラスでのコードの実行を妨げることはできませんが、スーパークラスの呼び出しを忘れてサブクラスがスーパークラスの状態を破壊することはできません。
出典: http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html
しかし、あなたのメソッドにはfinal
修飾子があるので、バグを発見し、バグレポートを記録したいと思うかもしれません。 https://github.com/checkstyle/checkstyle/issues
一見すると、これは一体全体のプログラミングスタイルのように見えます...これは、継承するメソッドを計画しているかどうかをチェックするだけです...そして、それらを宣言できますfinal,abstract or empty implementation.
次に、それをfinalと宣言します...;)要件のシナリオに応じて、クラスはfinalにすることも、メソッドを個別にすることもできます。
このチェックは役に立ち、ほとんどの場合警告は正当化されます。時にはそれは適切ではないので無視します。