8

私はJavaプロジェクトを解析するためにPMDをインストールしました。本当に素晴らしいツールです。私は、PMDのドキュメントをチェックアウトし、説明は言う抽象クラスの空のメソッド

を「抽象クラスで空のメソッドを代わりに抽象的でなければなりません」

はとにかく、私は言っていくつかのエラーが得ました

の開発者は、適切なコードを記述するのではなく、空の実装に頼ることがあります。

だから私はこのコードスタイルエラーの背後にある理由を理解していると思うが、次のシナリオを考えてみよう:私はエンティティと呼ばれる抽象クラスがあります。このクラスには、デフォルト実装のブール値メソッドがあります。 (削除時に関連エンティティを削除するかどうかを制御します)。派生クラスのほんの少数だけが、このデフォルトの動作をtrueにオーバーライドします。

デフォルトの実装を削除し、すべての派生クラスに動作を宣言する必要がありますか? 本当にこのパターンはとても悪い習慣だと思いますか?

明確化: PMDは、単一のreturn文を持つメソッドを空として扱います。

答えて

9

私はそれだけで指針だと思います。それはあなたの設計を再考したいかもしれないようにあなたに指示しますが、あなたの設計がすでに完璧な意味を持つならば、あなたの脳ではなくソフトウェアに従う必要はありません。

0

メソッドにデフォルト実装がある場合、空ではありませんか?それとも、私は何かが恋しいですか?私にとって

、空のメソッドは次のようになります。

public void EmptyMethod() 
{} 
+5

だけでなく、PMDはあまりにも空としてブール値またはnullを返すメソッドを扱います – LiorH

0

は、Java 1.8上にある場合は、代わりに抽象クラスのインタフェースエンティティを作成し、その中にあなたの方法のためのデフォルト実装を書くことができます。

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

あなたは、参照のためにこれを使用することができます。 https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html