2015-05-07 52 views
0

構造函數中的代碼不會被調用。我必須調用一個額外的函數來調用代碼。無法在構造函數中添加到ArrayLists

測試代碼:

public static void main(String[] args){ 
      SourceClass myClass = new SourceClass(); 
      myClass.Populate();//If this line is removed it does not work 
      System.out.println(myClass.GetDescGroup()); 

     } 

:被測試代碼:

public class SourceClass { 

    static ArrayList<String> line = new ArrayList<String>(); 
    static ArrayList<ArrayList> description = new ArrayList<ArrayList>(); 
    static ArrayList<ArrayList> descGroup = new ArrayList<ArrayList>(); 

    public void SourceClass() { 
     //Does not work. 
     String testLine = new String("1 v1 v2 v3"); 
     String[] testLineSplit = testLine.split(" "); 
     for (int i = 0; i < testLineSplit.length;i++) { 
      line.add(testLineSplit[i]); 
     } 

     description.add(line); 
     descGroup.add(description);  
    } 

    public void Populate() { 
     //works 
     String testLine = new String("1 v1 v2 v3"); 
     String[] testLineSplit = testLine.split(" "); 
     for (int i = 0; i < testLineSplit.length;i++) { 
      line.add(testLineSplit[i]); 
     } 

     description.add(line); 
     descGroup.add(description); 
    } 

    public String GetDescGroup() { 
     return descGroup.get(0).get(0).toString(); 
    } 
} 

相同的代碼進去填充()和SourceClass()

當一個函數被調用,以獲得的ArrayList它只是變成空的

+1

向我們展示完整的代碼..它在哪裏工作?它不工作在哪裏? – TheLostMind

+0

你爲什麼想要ArrayList ? – bmargulies

+1

構造函數在哪裏? – nafas

回答

2

你的方法SourceClass有一個返回類型void這使它成爲一種方法而不是構造函數。所以,當你創建新的SourceClass對象調用默認的空構造

的構造必須是:

public SourceClass() { 
.... 
} 
0

當你定義一個構造函數,不給它一個返回值。

在你的代碼:

public void SourceClass() { 
    //Does not work. 
    String testLine = new String("1 v1 v2 v3"); 
    String[] testLineSplit = testLine.split(" "); 
    for (int i = 0; i < testLineSplit.length;i++) { 
     line.add(testLineSplit[i]); 
    } 

    description.add(line); 
    descGroup.add(description);  
} 

這不是一個構造函數,只是一個具有相同的名稱類的類的方法,並返回void。

在這種情況下,由於Java瞭解您不提供任何構造函數,因此java提供了一個不帶參數的默認構造函數。在測試代​​碼中,這個默認構造函數被調用,而不是你的SourceClass方法。

要解決它只是從構造函數聲明中刪除'void'。

相關問題