我想做类似的事情:
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 :(得分: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));
}