2016-11-24 30 views
0

我想用下面的構造函數數組列表初始化顯示爲布爾

public PageBreak(String sheetName, ArrayList<Integer> rowPageBreaks, ArrayList<Integer> columnPageBreaks) 
{ 
    this.sheetName = sheetName; 
    this.rowPageBreaks = rowPageBreaks; 
    this.columnPageBreaks = columnPageBreaks; 
} 

在另一種方法創建一個對象,我做以下電話:

pageBreaks.add(new PageBreak(teamResultSheet.getName(), 
       new ArrayList<Integer>().add(teamResultSheet.getRowPageBreak()), null)); 

然後我得到以下錯誤消息:構造函數PageBreak(String,boolean,null)未定義。

如何在現場創建ArrayList<Integer>

+2

調用'加()'方法將返回一個'boolean'。如果你只想創建一個'ArrayList'對象,那麼你只需要寫'new ArrayList ()'。 – Logan

+0

@LoganKulinski:如果您下次有答案,建議您寫出答案。在評論中留下這樣的知識毫無意義。 – Makoto

+0

@Makoto會做,謝謝。 – Logan

回答

1

雖然誠的答案是正確的,並解釋爲什麼您收到此錯誤,併爲您提供合理的建議,以創建您的ArrayList你使用它之前,你可能想知道是否有可以使你的代碼的任何其它方式更簡潔。

與更近期的語言(如Groovy或Kotlin)不同,Java不幸的是沒有列出文字作爲語言語法。有人試圖繞過這個限制;你可能一直在試圖用你的代碼是double brace initialization idiom

pageBreaks.add(new PageBreak(teamResultSheet.getName(), 
       new ArrayList<Integer>() {{add(teamResultSheet.getRowPageBreak());}}, 
       null); 

雖然這可能看起來很可愛,它有它的缺點,因爲在上面的鏈接描述。

你真的需要將實際的ArrayList s傳遞給你的構造函數嗎?爲什麼不把它帶到List s,這將使其更加靈活:

public PageBreak(String sheetName, List<Integer> rowPageBreaks, List<Integer> columnPageBreaks) 
{ 
    ... 
} 

然後,你可以自由地通過它ArrayList S,和以前一樣,或任何其他種類的List

pageBreaks.add(new PageBreak(teamResultSheet.getName(), 
       Arrays.asList(teamResultSheet.getRowPageBreak()), 
       null); 

這看起來更簡潔,沒有前者的缺點;然而,該列表是固定大小和不可變的。

如果你只想要一個單元素的列表,這是更有效地使用下列內容:

pageBreaks.add(new PageBreak(teamResultSheet.getName(), 
       Collections.singletonList(teamResultSheet.getRowPageBreak()), 
       null); 
+0

我有意避免使用雙花括號初始值設定項,因爲它使代碼不易讀。 – Makoto

3

您打算在之前填寫您的列表,然後嘗試使用它。發生了什麼事:

  • 你實例化一個新的ArrayList<Integer>
  • 立即請撥打該列表中的add
  • add的結果是boolean(因此always returns true)。
  • boolean結果是什麼解釋,和不是的列表。
+0

謝謝真誠,非常明確的答案! –