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



我想做这样的事情:

 List queryTerms = null;
 if (tsym) {
     queryTerms = buildTreasuryQueryTerms(event, budgetLevel, null, null);
 }
 queryTerms.add(buildQueryTerms(event, session, budgetLevel));

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

忍者编辑buildQueryTerms返回protected List

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

所以你需要执行以下操作,假设 buildTreasuryQueryTerms() 在执行时将返回一个 List:

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

不,您不能使用 .add() 初始化列表

执行(假设对象类型为 QueryTerm)。

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

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

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

您可以按如下方式初始化queryTerms

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

最新更新