抽象クラスで空のメソッド
-
09-09-2019 - |
質問
私はちょうど私のJavaプロジェクトを分析するためにPMDをインストールしました。本当に便利なツール、強くお勧めします。 とにかく、私はいくつかのエラーを言ってしまった。
「抽象クラスの空のメソッドの代わりに抽象的であるべきである」
私は、PMDのドキュメントをチェックアウトし、説明は述べています:
開発者は、この空の実装に依存しているのではなく適切なものをコードすることができるように
だから、私はこのコードスタイル・エラーの背後にある理由を理解すると思うが、次のシナリオを検討してください:私は、エンティティと呼ばれる抽象クラスを持っています。このクラスは、デフォルトの実装でブール方法があります。 (削除時にそれに関連するエンティティを削除するかどうかを制御します)。派生クラスのごく一部がtrueに、このデフォルトの動作をオーバーライドます。
私は、デフォルトの実装を削除し、その行動を宣言するために、すべての派生クラスを強制すべきか? あなたは本当にこのパターンは、このような悪い習慣だと思いますか?
を明確化:のPMDが空のような単一のreturn文でメソッドを扱います。
解決
私はそれだけで指針だと思います。あなたのデザインを再考することがありますように、それはわかりますが、あなたのデザインがすでに完璧な理にかなっている場合は、代わりにあなたの脳のソフトウェアを遵守する理由はありません。
他のヒント
、あなたの代わりに抽象クラスのエンティティのインターフェースを作成し、をデフォルトその中にあなたの方法のためのの実装を書くことができます。
public interface Entity {
default boolean yourMethod() {
//default implementation ...
}
}
あなたは、参照のためにこれを使用することができます。 https://docs.oracle.com/javase/tutorial/java/IandI /defaultmethods.htmlする