2016-11-27 52 views
1

這是一個非常簡單的問題。我做一個簡單的Java對象爲我的應用程序如下:根據布爾值製作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 
    /* ..................... */ 
} 

基本上,我要的是,使用取決於布爾值不同的構造。如果布爾值爲true,則使用一個構造函數,如果其爲false,則使用其他構造函數。我怎樣才能做到這一點?

+0

那你爲什麼需要布爾PARAM? 你可以有下面的構造函數: 公共類別(字符串類別名稱,類別[] subcategoryList) 和 公共類別(字符串類別名) 和將要使用的構造depands如果傳遞的子類別與否。 – fbwnd

+0

我不認爲這就是你想要的。你只想刪除布爾參數(它應該是一個布爾型,BTW,不是布爾型),並且在調用第二個構造函數時將布爾型字段設置爲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