CurryPanのブログ

カレーパンとプログラミング

【PMD, Java】 Overridable method 'hoge' called during object construction が出た

以下のようなクラスを作ったときのことです。
PMDをチェックすると、

Overridable method 'hoge' called during object construction

という警告が出ていました。

public class Hoge {

    private String fuga
    
    /**
    * コンストラクタ.
    */
    public Hoge(String fuga) {
        setFuga(fuga);
    }

    /**
    * ふがを設定する.
    * fuga ふが
    */
    public void setFuga(String fuga) {
        // 何らかの処理
        this.fuga = fuga;
    }

}

警告の対象はコンストラクタのsetFuga()の呼び出し行でした。

いろいろ調べたところ、コンストラクタの実行時はインスタンスを生成している最中なので、メソッド自体がまだ不安定な状態らしいのです。その状態で呼び出されても、動作を保証できませんよ、ということみたいです。

ということで、コンストラクタ内でクラス内のメソッドを呼び出していることが原因でした。セッターを使わずにフィールドに値を設定するように処理を変更することで対処しました。

初歩中の初歩すぎて検索しても出てこなかったです。
お恥ずかしい。