我想做这样的事情:
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));
}