4

ビーンフレンドリーなクラスを書きたい。init()私は、必要なパラメーターをコンストラクターからセッターに移動する (そして初期状態のセットアップが完了したらメソッドを使用する) 傾向を (主に Bean で) 観察しました。

Java オブジェクトと同様に、Bean インフラストラクチャーなしでクラスを使用できるようにしたいので、このメソッドは私にとって重要です。私が想像しているように、すべてのメソッドassert styleでオブジェクトの適切な状態を確認する必要があります。

上記の簡単なデモ:

class A {
    public int x;
    public int y;
    private int sum;

    private boolean initialized = false;

    public void init() {
        sum = x + y;
        initialized = true;
    }

    private void initCheck() {
        if (!initialized) {
            throw new IllegalStateException("Uninitialized object.");
        }
    }

    public int getXMulSum() {
        initCheck();
        return x * sum;
    }

    public int getYMulSum() {
        initCheck();
        return y * sum;
    }

}

より良い習慣はありますか?

4

2 に答える 2

1

セッターは、循環依存関係を処理できるため、コンストラクター引数よりも一般的です。

循環依存関係がない場合は、依存関係を強制する目的で、コンストラクター引数を使用することをお勧めします。

ただし、可能な限り、コンストラクターにロジックを入れないでください。ブラッドが言ったように、それはアプリケーションをもろくします。コンストラクター中に Spring 環境全体を使用できない場合があります。

後で実際のメソッドで使用するために、コンストラクターが参照を簡単に記憶できるように設計してください。可能であれば、init() メソッドは避けてください。

于 2014-04-07T15:18:33.697 に答える