2012-04-12 3 views

答えて

8

ません。必要な数のコンストラクタを持つことができ、デフォルトのコンストラクタは必ずしも必要ではありません。 コンストラクタは、クラスの目的に合っている必要があります。これが唯一のベストプラクティスです。

+0

答えは「これはベストプラクティスではありませんが、依存性注入にはパラメータのないコンストラクタが必要です。 – hidarikani

+0

依存性注入にはパラメータのないコンストラクタは不要です。代わりに「コンストラクタ注入」 – samlewis

1

いいえ、まったくありません。デフォルトまたは "no-arg"コンストラクタは、利用可能なコンストラクタの1つとして、コンストラクタとしてではなく、クラスが持つ便利な機能です。建設中のオブジェクトの重要な不変量を確立するのはです。です。引数を持つコンストラクタは、これを達成するために必要な場合がよくあります。

1

私は「いいえ」と言います。 Dependency Injectionなどのデカップリングメカニズムを使用する場合、コンストラクタのパラメータは不変の依存関係を定義するのに最適な場所です。同様に、オブジェクトのその他の不変のパラメータは、コンストラクタに入る必要があります。

3

これについてはさまざまな考えがあります。 JavaBeansパターンはデフォルトのコンストラクタとgetterとsetterがオブジェクトをファイナライズすることを期待しています。しかし、これにより、リムボウの状態になる可能性があります(詳細については、Josh BlochのEffective Javaを参照してください)。あなたは、クラス(別名依存性注入)のインスタンスを作成するために必要なインスタンスを提供するために必要とされるよう

コンストラクタのパラメータは、「魔法」の任意のフォームを防ぎます。

1

答えは「はい」または「いいえ」ではありません。

しばしば、パラメータ化コンストラクタは不変(final)の値を持つオブジェクトを初期化するために使用されます。私の頭に最初に来るのは、次の例です。

public class Car { 
    public Car(String chassisCode) {...} 

    public String getChassisCode(); 

    public String getLicenseNumber() {...} 
    public void setLicenseNumber(String value) {...} 
} 

ナンバープレートの登録番号は車のライフサイクル中に変更できるため、get/setプロパティとして実装できます。代わりにシャシー登録コードは各車に固有であり、は不変です。自動車はいつでもナンバープレートを交換することができますが、ナンバープレートやオーナーが変更されると、シャーシ番号は不変で、マニュアルに登録されます。

他のケースでは、クラスの「デフォルト」の動作を取得するために、「デフォルトの」パラメータのないコンストラクタが必要な場合があります。例

public class LightSwitch { 
    private boolean state = false; //off 

    public LightSwitch() {} 

    public boolean getState(); 
    public void setState(boolean value); 
} 

明示的にスイッチをオンにしない限り、ライトスイッチはオフと見なされます。

+0

を読んでください「シャシーナンバー」:D –

+0

あなたは最高の説明をしましたが、質問に対する答えは「いいえ、ベストプラクティスではありません」です – hidarikani

関連する問題