31

私は Checkstyle を使用していますが、このメソッドに関するエラーが発生しています:

public final String getAdmitCodeStatus() {
    return admitCodeStatus;
}

エラーは次のとおりです。

メソッド「getAdmitCodeStatus」は拡張用に設計されていません - 抽象的、最終的、または空である必要があります。

その方法はどのように準拠していないのですか? このメソッドについて Checkstyle が私に吠えるような、私が間違っていることはありますか?

4

3 に答える 3

32

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

于 2012-04-16T14:44:58.487 に答える
0

このチェックは便利で、ほとんどの場合、警告は正当化されると思います。時々それは適切ではなく、それから私はそれを無視します。

于 2016-12-05T20:23:46.617 に答える