#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{}