如何使用另一个列表的项目初始化List?

时间:2013-10-28 14:04:58

标签: java 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

4 个答案:

答案 0 :(得分:4)

在操作对象之前需要一个实例。在您的情况下,queryTerms不引用任何实例(它是一个空引用) - 没有对象可以调用.add()

因此,如果执行了buildTreasuryQueryTerms()将返回List,那么您需要执行以下操作:

List queryTerms = null;

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

答案 1 :(得分:1)

不,您无法使用.add()

初始化列表

Do(假设对象的类型为QueryTerm)..

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

而不是将列表初始化为null。

答案 2 :(得分:1)

在致电add之前,您必须使用new对其进行初始化,否则会引发NullPointerException

答案 3 :(得分:1)

您可以将queryTerms初始化为:

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