Остановить текущий процесс цикла при нулевом значении и продолжить со следующим значением

#java #nullpointerexception

#java #исключение nullpointerexception

Вопрос:

Теперь, когда as[i].getUser() = null программа останавливается NullPointerException . Но я хочу остановить только текущий процесс цикла и продолжить со следующим значением, лучшим будет метод convertUser() , поскольку он используется во многих местах. Я знаю, что перехват NullPointerException не рекомендуется.

 public Project[] convertProjects(){
    ProjectR[] as = getProjects();
    Project[] bs = new Project[a.length];

    for(int i = 0; i < as.length; i  ){
        Project b = new Project();
        b.setName(as[i].getNameR());
        b.setUser(convertUser(as[i].getUserR()));
        b.setCenter(convertCenter(as[i].getCenterR()));
        bs[i]=b;
    }
    return bs;
 }
private Center convertCenter(CenterR centerR) {
    Center centerL = new Center();
    centerL.setManager(convertUser(centerR.getUser()));
    centerL.setName(centerR.getName());
    centerL.setResID(centerR.getID());
    return centerL;
}

private User convertUser(UserR uR) {
    User userL = new PFPWSUser();
    userL.setID(uR.getID());
    userL.setFirstName(uR.getFirstName());
    userL.setLastName(uR.getLastName());
    userL.setEmail(uR.getEmail());
    return userL;
}
  

Комментарии:

1. Улучшенная обработка пользовательских исключений.

Ответ №1:

Добавьте эти две строки

     as[i] == null
    continue;
    b.setUser(convertUser(as[i].getUserR()));
  

внутри вашего метода convertProjects

Ответ №2:

Проверьте, является ли as[i].getUserR() значение null, прежде чем использовать его:

 if(as[i].getUserR() != null) { // Can use since not null
    b.setUser(convertUser(as[i].getUserR()));
}
  

Поскольку нулевые значения не используются, исключение NullPointerException не будет выдано, и цикл будет продолжен.

Ответ №3:

вставить элемент проверки как [i] для null

 if (as[i]==null) continue;
  

в начале блока for{}