자바에서 런타임 예외를 함수 호출을 통한 슈퍼 "중단"으로 사용하는 것은 나쁜 습관입니까?

지아 팡

때로는 일련의 함수 호출이 있는데, 중간에 결과를 결정하고 전체 함수 체인을 중간 방식으로 중지하려고합니다. 이 경우 다음과 같은 방법이 나쁜가요?

public ResponseObject composeResponse {
   try {
       ResponseObject response = new ResponseObject();
       processA(response);
       processB(response);
       processC(response);
       processD(response);
          .
          .
          .
       return response;
       } catch (SomeFlagException e){
       return response;        
       }
   }

각 프로세스 기능에 대해 다음과 같습니다.

public void processA(ResponseObject response){
    minorProcess1(response);
    minorProcess2(response);
    minorProcess3(response);
      .
      .
      .
}

일부 특정 조건 (예 : minorProcess3 ())에서는 결과가 결정되고 나머지 프로세스는 원하지 않는 경우가 있습니다. 이것이 많은 minorProcesses에서 발생한다고 가정합니다.

public void minorProcess3(ResponseObject response){
    //some process
    if (someFlag){
        //want end the process and return the result
        throw new SomeFlagException(); //SomeFlagException extends RuntimeException
    }
}

내 마음은 "예외"가 아니라 예상되는 결과이기 때문에 아니오라고 말하고 있습니다. 그리고 체크되지 않은 Exception은 합리적으로 해결할 수 없을 때만 던져 져야한다고 들었습니다. 하지만 코드를 깔끔하게 만들기 위해 이런 식으로 만 생각할 수있었습니다. 그렇지 않으면 코드가 조건 검사를 기본 함수로 다시 연결해야합니다.

편집 : 내 상황에 대한 정보 추가. 웹 프로젝트이므로 페이로드로 적절한 응답을 반환한다고 가정합니다. 때때로 요청은 204 / 40x로 응답해야합니다. 페이로드가 필요하지 않으므로 추가 프로세스가 필요하지 않으며 포기해야합니다.

랄프 클레버 호프

예, 그렇게하는 것은 정말 나쁜 습관입니다.

예외는 일부 방법이 계약을 이행 할 수 없음을 의미합니다. 당신이 묻는 접근 방식은 이것을 반대로 바꾸어 놓는다 : 조기 성공을 의미하는 예외를 사용하라

기술적으로는 작동하지만 예외의 의도 된 의미에 너무 많이 반대하므로 그러한 접근 방식을 사용하지 않는 것이 좋습니다.

그리고 체크되지 않은 Exception은 합리적으로 해결할 수 없을 때만 던져 져야한다고 들었습니다.

IMHO, 이것은 나쁜 조언입니다. 예외를 던지는 사람으로서 호출 스택의 일부 호출자 메서드가 실패 후에도 성공적으로 계속 될 수 있는지 어떻게 알 수 있습니까? 이는 호출자의 컨텍스트에서만 결정할 수 있으며 (실패에 대한 대체 전략이 있는지 여부) 예외 유형에 거의 의존하지 않습니다. 그것을 결정하는 것은 당신의 책임이 아니며, 당신이 그 결정을 내리려고하더라도 아마도 잘못된 것으로 판명 될 것입니다.

예를 들어, 발신자의 경우 NullPointerException또는으로 인해 실패했는지 여부는 일반적으로 중요하지 않으며 IOException선택되지 않은 / 선택된 범주의 두 가지 두드러진 예를들 수 있습니다. 중요한 것은 당신이 실패했고 아마도 호출자가 실패 후 어떻게 진행해야하는지 알고 있다는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관