2015-01-09 3 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!"; 
      } 
     } 
    } 
} 

첫 번째 경우-else 문은 '죽은 코드'로 나타납니다. 누군가가 왜 나를 이해할 수있게 도와 주실 수 있습니까?

+1

정확히 어느 부분이 데드 코드입니까? –

+0

첫 번째 :'if (a == null) {return "Ato médico inexistente!"}} else {...' – Ghost

+0

또한 모든 'else'에서 값을 반환하기 때문에 'else' 케이스 – Hacketo

답변

11

a은 첫 번째 if 문에서 null 일 수 없습니다. 그럴 경우 코드가 행에 NullPointerException이됩니다.

+0

아아. 아름다운 :) –

8

글쎄, aif에 도달하면 절대로 null이 될 수 없습니다. 따라서 null 검사가 필요하지 않으며 if 문에있는 코드는 절대로 실행될 수 없습니다. - 따라서 입니다. 당신이 대신 Optional 클래스를 사용할 수있는 Java 8을 사용하는 경우,

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... 

또는 :

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... 

그래서, 당신이 대신해야 할 것은 같은입니다. 이 예제에서는 반환 대신 예외를 throw하는 방법을 보여줍니다.

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을 처리하는 좋은 방법! 이 Oracle tutorialOptional 체크 아웃에 대한 추가 정보를 원하시면

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

.