2013-10-28 65 views
0

我想要做的事,如:如何初始化List與另一個列表的項目?

List queryTerms = null; 

if (tsym) { 
    queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null); 
} 

queryTerms.add(buildQueryTerms(event, session, budgetLevel)); 

這編譯,但會拋出一個空指針異常,當我嘗試做queryTerms.add()tsym == null。你不能用.add()初始化一個列表嗎?

忍者編輯buildQueryTerms返回protected List

+0

什麼是「受保護目錄」?你認爲可見度會影響返回的對象嗎? – Kayaman

+0

我剛剛複製粘貼方法的第一個位 - 抱歉有任何混淆。 – MrDuk

回答

4

你需要一個實例,然後才能在對象上進行操作。在你的情況下,queryTerms不引用任何實例(它是一個空引用) - 將不會有任何對象,你可以打電話.add()

所以,你需要做到以下幾點,假設buildTreasuryQueryTerms如果執行它()將返回一個列表:

List queryTerms = null; 

if (tsym) { 
    queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null); 
} else { 
    queryTerms = new ArrayList(); 
} 
1

不,你不能.add()

DO(假設對象的類型QueryTerm)的初始化列表..

List<QueryTerm> queryTerms = new ArrayList<>(); 

相反而不是將列表初始化爲空。

1

在您致電add之前,您必須用new對其初始化,否則將拋出NullPointerException

1

可以初始化queryTerms就象這樣:

if (tsym) { 
    queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null); 
} else { 
    queryTerms = new ArrayList(buildQueryTerms(event, session, budgetLevel)); 
} 
+1

這將從'queryTerms = buildTreasuryQueryTerms(event,budgetLevel,null,null);' – jama

+0

中刪除ArrayList中的任何現有項目,但問題是關於初始化列表。 –

+0

是的......但如果你創建一個新的'ArrayList',如果'tsym == true'會發生什麼? – jama