2016-11-27 7 views
1

これは本当に簡単な質問です。私が欲しいものを基本的にブール値に応じて2つのコンストラクタを作成する

public class Category{ 
    // STATE 
    private String mCategoryName; 
    private Boolean mContainsSubcategories; 
    private Subcategory[] mSubcategoryList; // Subcategory is another object 
    // Constructor 
    // for mContainsSubcategories == false, use the below constructor 
    public Category(String categoryName, Boolean containsSubcategories){ 

    } 
    // for mContainsSubcategories == true, use the below constructor 
    public Category(String categoryName, Boolean containsSubcategories, Subcategory[] subcategoryList){ 

    } 

    // GETTER METHODS 
    /* ..................... */ 
} 

を、ブール値に応じて、異なるコンストラクタを使用して、次のように私は私のアプリのための単純なJavaオブジェクトを作ってるんです。ブール値がtrueの場合はコンストラクタを1つ使用し、falseの場合は他のコンストラクタを使用します。これどうやってするの?

+0

なぜあなたはブールのparamが必要なのでしょうか? 次のコンストラクタ持つことができます。 公共部門(文字列カテゴリ名、サブカテゴリ[] subcategoryList) と 公共部門(文字列カテゴリ名) を、あなたはサブカテゴリかを渡す場合は、コンストラクタのdepandsを使用します。 – fbwnd

+0

私はそれがあなたが望むものだとは思わない。 boolean型の引数(ブール値、ブール値ではなく、ブール値でなければなりません)を削除し、2番目のコンストラクタでbooleanフィールドをtrueに設定し、最初のコンストラクタでfalseに設定します。しかし、それでも、このブール値のポイントは何ですか。サブカテゴリがあるかどうかを知るには、配列の長さが> 0であるかどうかを調べるだけです。その情報を複製する必要はありません。私はそれがサブカテゴリが含まれている場合は、別のレイアウトを使用したいので –

+0

は... – Asym

答えて

1

は、getInstanceメソッドを作成します。

public class Category{ 

    // STATE 
    private String mCategoryName; 
    private Boolean mContainsSubcategories; 
    private Subcategory[] mSubcategoryList; // Subcategory is another object 
    // Constructor 
    public static Category getInstance(boolean mContainsSubcategories,String mCategoryName, Subcategory[] subcategoryList) { 
     if (mContainsSubcategories){ 
      return new Category(mCategoryName); 
     }else { 
      return new Category(mCategoryName,subcategoryList); 
     } 
    } 
    // for mContainsSubcategories == false, use the below constructor 
    public Category(String categoryName){ 

    } 
    // for mContainsSubcategories == true, use the below constructor 
    public Category(String categoryName, Subcategory[] subcategoryList){ 

    } 

    // GETTER METHODS 
    /* ..................... */ 
} 

をそして、それは使用初期化する:

Category myCategory =  
     Category.getInstance(mContainsSubcategories,mCategoryName,subcategoryList); 
        //instead of new Category 
+0

それは非常によく質問に答える。どうもありがとう! – Asym

関連する問題