2015-01-09 5 views
2

Я работаю над приложением JavaEE и у меня есть следующий метод:Условный оператор: мертвый код

public String alterar_data_ato_med (int cod_ato, GregorianCalendar nova_data) { 
    AtoMedico a=em.find(AtoMedico.class,cod_ato); 
    Medico m=a.getmedico(); 
    Utente u=a.getutente(); 
    GregorianCalendar today=new GregorianCalendar(); 
    if(a==null){ 
     return "Ato Médico inexistente!"; 
    }else{ 
     if(m.getAgenda_atos().contains(nova_data)||m.getAgenda_consultas().contains(nova_data)){ 
      return "Médico indisponível"; 
     }else{ 
      if(u.getAgenda().contains(nova_data)||nova_data.before(today)){ 
       return "Data indisponível!"; 
      }else{ 
       GregorianCalendar antiga_data=a.getData_ato_med(); 
       a.setData_ato_med(nova_data); 
       m.getAgenda_atos().remove(antiga_data); 
       u.getAgenda().remove(antiga_data); 
       return "Data do ato médico alterada!"; 
      } 
     } 
    } 
} 

Первое, если-другое заявление, как представляется, быть «мертвым кодом». Может ли кто-нибудь помочь мне понять, почему?

+1

Какая именно часть является мертвым кодом? –

+0

первый: 'if (a == null) {return" Ato médico inexistente! ";} Else {...' – Ghost

+0

также FYI, все 'else' бесполезны, так как вы возвращаете значение во всех if случаи – Hacketo

ответ

11

a не может быть пустым при первом утверждении if. Если бы это было так, ваш код выбросил бы NullPointerException по линии Medico m=a.getmedico().

+0

Aahh. Красивый :) –

8

Ну, a никогда не может быть пустым, когда он достигнет if -статье. Поэтому проверка null не требуется, и код в if-statement никогда не может быть выполнен - отсюда dead.

AtoMedico a=em.find(AtoMedico.class,cod_ato); // At this point a may be null... 

Medico m=a.getmedico(); // If a is null here, there will be a NullPointerException 

// And you will not reach this code down here... 

Итак, что вы должны сделать, вместо того, чтобы что-то вроде:

AtoMedico a=em.find(AtoMedico.class,cod_ato); 

if (a == null) { 
    return "Ato Médico inexistente!"; 
} 

// Now, it is safe to continue referencing a 
Medico m=a.getmedico(); 
// and so on... 

Или, если вы используете Java 8 вы можете использовать Optional класс вместо этого. В этом примере показано, как исключить исключение вместо возврата.

AtoMedico a = Optional.ofNullable(em.find(AtoMedico.class,cod_ato)) 
         .orElseThrow(() -> new IllegalStateException("Ato Médico inexistente!")); 
// Now a is safe to use 

И, если вы не хотите, что вы можете использовать ifPresent. Хороший способ обработки null!

Optional<AtoMedico> a = Optional.ofNullable(em.find(AtoMedico.class,cod_ato)); 
a.ifPresent(ato -> { 
    // Do your stuff here... 
    Medico m=ato.getmedico(); 
}); 

Для получения дополнительной информации о Optional проверить это Oracle tutorial.

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