2015-10-21 4 views
5

Сегодня я получил исключение NullPointerException в точке, где это на самом деле не может произойти.NullPointerException с ArrayList - не должно быть возможным?

Exception in thread "Timer-9" java.lang.NullPointerException 
    at packagename.censored.Bot.changeServergroups(Bot.java:1363) 
    at packagename.censored.Bot.xpTask(Bot.java:1239) 
    at packagename.censored.Bot.access$7(Bot.java:1187) 
    at packagename.censored.Bot$9.run(Bot.java:729) 
    at java.util.TimerThread.mainLoop(Timer.java:555) 
    at java.util.TimerThread.run(Timer.java:505) 

Это соответствующая часть кода:

public void changeServergroups(int cldbid, ArrayList<Integer> addList, ArrayList<Integer> removeList) { 
    // If there are groups to add AND delete, remove them from the lists 
    if (addList != null && removeList != null) { 
     ArrayList<Integer> temp = new ArrayList<Integer>(addList); 
     for (int s : temp) { // THIS IS LINE 1363 
      if (removeList.contains(s)) { 
       addList.remove((Integer) s); 
       removeList.remove((Integer) s); 
      } 
     } 
    } 
    // some more code, to do the actual group changes 
} 

Как можно получить NullPointerException там? Я проверяю, чтобы addList не был нулевым, прежде чем создавать из него новый временный ArrayList. Может ли кто-нибудь сказать мне, как это может вернуться в NullPointerException?

ответ

9

Единственная возможность в том, что ваш список temp содержит null. Нуль Integer затем распаковывается в int и выдает NPE.

Вы можете решить NPE, используя for (Integer s : temp), если допустимо нулевое значение.

+0

Спасибо за эту идею. Я проверю, возможно ли, что 'addList' будет содержать null в этой точке. – pimeys

+0

не должен распаковывать NULL для NULL? – SacJn

+0

Это, оказывается, правильный ответ. Из-за ошибки в другом методе 'addList' здесь содержал null, в результате чего был описан NPE. Благодаря! – pimeys

Смежные вопросы