2013-10-28 29 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