0

我想做类似的事情:

 List queryTerms = null;

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

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

这可以编译,但是当我尝试执行queryTerms.add()when 时会引发空指针异常tsym == null。你不能用 初始化一个列表.add()吗?

忍者编辑buildQueryTerms返回一个protected List

4

4 回答 4

4

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

因此,您需要执行以下操作,假设 buildTreasuryQueryTerms() 如果执行将返回一个 List:

List queryTerms = null;

 if (tsym) {
     queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null);
 } else {
     queryTerms = new ArrayList();
 }
于 2013-10-28T14:08:16.417 回答
1

不,你不能用.add()

做(假设对象是 QueryTerm 类型)..

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

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

于 2013-10-28T14:06:32.213 回答
1

在你调用之前add你必须用 初始化它new,否则它会抛出一个NullPointerException.

于 2013-10-28T14:06:55.917 回答
1

你可以这样初始化queryTerms

if (tsym) {
     queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null);
} else {
     queryTerms = new ArrayList(buildQueryTerms(event, session, budgetLevel));
}
于 2013-10-28T14:07:24.920 回答