0

私は次のようなことをしたい:

 List queryTerms = null;

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

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

queryTerms.add()これはコンパイルされますが、 whenを実行しようとすると null ポインター例外がスローされますtsym == null。でリストを初期化できません.add()か?

忍者編集:buildQueryTermsを返しますprotected List

4

4 に答える 4

4

オブジェクトを操作するには、インスタンスが必要です。あなたの場合、queryTermsインスタンスを参照していません(null参照です)-呼び出すことができるオブジェクトはありません.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

次のように初期化できますqueryTerms

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

いいえ、リストを初期化することはできません.add()

Do (オブジェクトのタイプが QueryTerm であると仮定)。

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

リストを null に初期化するのではなく。

于 2013-10-28T14:06:32.213 に答える
1

呼び出す前に、でadd初期化する必要があります。newそうしないと、NullPointerException.

于 2013-10-28T14:06:55.917 に答える