2014-10-28 93 views
0

我想知道是否可以調用多個構造函數並通過它們初始化一個對象值。我一直在尋找答案,但我沒有找到答案;讓我告訴你一些代碼,並提前感謝你的幫助:初始化一個對象的多個構造函數

int MAX_VALUE; // Field variable 
    boolean[] elements = new boolean[10000]; // Field variable 

    public IntegerSet(int maxValue) { 
     this.MAX_VALUE = maxValue; 
    } 
    public IntegerSet(boolean[] tmp) { 
     int i = 0; 

     for(i = 0; i < tmp.length; ++i) 
      this.elements[i] = tmp[i]; 

     this.elements = Arrays.copyOf(this.elements, tmp.length); 
    } 

/*In main:*/ 

    // I just want to have one object, s1, and I want to be able 
    // to access MAX_VALUE and elements by s1.MAX_VALUE and s1.elements 
    IntegerSet s1 = new IntegerSet(50); 
    /* SOMETHING that uses second constructor with object s1*/ 
+1

您可以從另一個構造函數中調用調用構造函數'這(args)' – Kon 2014-10-28 18:00:05

+0

爲什麼不使用setter? – aa333 2014-10-28 18:02:31

+0

是的,但如果我從構造函數1調用constructor2,那麼我需要將constructor2的參數作爲參數傳遞給constructor1。我不想這樣做。 – 2014-10-28 18:04:24

回答

2

你不能調用多個構造函數來創建一個類的實例。每次調用都會創建一個與另一個完全不同的新實例。同時設置int領域和使用構造數組,其值應傳遞給構造本身:

public IntegerSet(boolean[] tmp, int maxValue) { 
    this.MAX_VALUE = maxValue; 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 

這相當於

public IntegerSet(boolean[] tmp, int maxValue) { 
    this(maxValue); // will call the constructor that takes one parameter 
    int i = 0; 

    for(i = 0; i < tmp.length; ++i) 
     this.elements[i] = tmp[i]; 

    this.elements = Arrays.copyOf(this.elements, tmp.length); 
} 
+0

是的,我完全同意,這是我會這樣做的方式,雖然它明確規定我應該使用2個構造函數而不是1。 – 2014-10-28 18:07:07

+0

@Sandkar在您的類中使用兩個構造函數創建單個實例的唯一方法是讓一個構造函數調用另一個。但仍然需要第一個構造函數的兩個參數。 – manouti 2014-10-28 18:16:28

相關問題