5

クラスがオブジェクトの作成中に複数のフィールド情報を必要とし、それが許可する情報が少ない場合
、1. 複数のコンストラクターを提供するか、
2. オブジェクトの作成中にクライアントが null 引数を渡すことを許可します。

これらの中でベストプラクティスです。例:
ケース-1:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    Test(A ob1,B ob2){
            this(ob1, ob2, null);    
    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B());
    }
}

ケース-2:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B(), null);
    }
}

同じクラスで main メソッドを使用しました。他のクラスでこれらのメイン メソッドを検討してください。

4

5 に答える 5

9

複数のコンストラクターを使用するのが最適です。多くの標準APIライブラリもそれを実装しています。また、コードが緩く結合されるため、明示的な「null」値を渡してオブジェクトを作成することはお勧めできません。

ケース2は、高結合の可能性を高めます。

主な質問とは別に:続きを読む:Javaで複数のコンストラクターを処理するための最良の方法

編集:

複数のコンストラクターを持つよりも自己文書化されているため、名前付きファクトリメソッドを使用してオブジェクトを構築することをお勧めします。[ジョシュア・ブロックによる効果的なジャワ]

于 2012-05-16T07:13:44.050 に答える
1

ケース 3、オブジェクトを作成するメソッドを提供します。

public class A {

  public static A create(B b) {
     A a = new A();
       a.setB(b);
  }

  public static A create(B b, C c) {
     A a = create(b);
       a.setC(c);

   return a;
  }

  private A() {} 

  public void setB(B);
  public void setC(C);

} 

コンストラクターは、メモリ リークを防ぐためにオブジェクトをクレートできる必要があります。パラメーターを少なくすると、NullPointerException が発生する状況が最小限に抑えられます。提示されたようなファクトリメソッドを提供すると、そのリスクが減少し、オブジェクトの制御が改善されます。

于 2012-05-16T07:08:58.297 に答える
1

ケース1は優先することです。これは、このオプションを持つ API のほとんどのクラスで行われます。また、将来のリリースでは、コンストラクターの呼び出しをアップグレードしなくても、必要に応じて 2 番目/3 番目/... の引数を変更できることも意味します。

于 2012-05-16T07:01:19.863 に答える
0

Null は入力されないため、将来のエラーや疑いの可能性が生じます

 new Thing( myA, null, null)

ここでは、ヌルの B とヌルの C を渡すことが意図されていることは明らかではありません。

 new Thing (myA)

明確です

于 2012-05-16T07:41:28.050 に答える
0

最初のケースが最適です。複数のコンストラクターを持つことを避けたいのはなぜですか? あなたがそれらを呼び出していない限り、それらはあなたを悩ませません。さまざまなコンストラクターを使用すると、コードの可読性も向上します。これは、オブジェクトをインスタンス化するために必要なパラメーターが明確であるためです。これは、不要なパラメーターを常に確認する必要がある null ケースとは対照的です。

于 2012-05-16T07:08:11.140 に答える