2012-10-01 1 views
2

DB 작업을 수행하고 성공/실패 값으로 boolean 값을 보내는 기능이 있습니다. 실패했다고 가정하고, 실패 이유를 반환 값으로 보내려고합니다.함수에서 사용자 지정 반환 메시지를 보내는 방법은 무엇입니까?

지금은 반환 값을 문자열로 정의했습니다. 실패한 경우 "failure: reason"을 반환하고 성공하면 "success"을 반환합니다. 하지만 이것은 좋은 습관이 아닙니다.

+0

왜 당신은 좋은 방법이 아닙니다 생각하십니까? – manas

+1

그게 바로 예외입니다. 실패한 경우 Exception을 발생시키고 그 이유를 메시지에 넣는다. –

답변

0

여기는 throw exception을 사용하는 것입니다. 메소드 서명을 아주 잘 변경하고 반환 값을 부울로 설정할 수 있습니다.그런 다음 사용자 정의 예외 클래스 생성 : 컨트롤러 (또는 서비스)에서

if (some_failure_reason == true) { 
    throw new MyCustomException(error_code) ; 
} 

을 제외 잡을 : 그 후

public class MyCustomException extends RuntimeException { 
    // define error code, error message etc. 
    // create getters & setters 
} 

, 당신은 실패에 대한 이유를 찾을 때마다를 이렇게

try { 
    // call the method in question 
} catch (MyCustomException mce) { 
    if(mce.getErrorCode() == some_error_code) { 
     // do stuff 
    } 
} 
+0

. 감사합니다 :) –

2

실패한 경우 custom Exception을 체크 아웃 할 수 있습니다.

public static final String DB_FAILURE_REASON1 = "failure: reason1"; 

그렇지 않으면 예외의 서브 클래스를 생성하고, 하나 예외의 특정 이유를 저장 :

public class DBException extends Exception{ 
    public DBException(String exp){super(exp)} 
    ... 
} 
0

당신은, 예를 들어 다른 클래스에 액세스 할 수 있도록 오류 메시지 정적 최종 문자열을 만들 수 있습니다 특정 실패 이유에 대한 서브 클래스의 msg 만들거나 더 서브 클래스 :

public class MyDBFailure extends Exception 

그리고 추가하려면 방법에 throws :

public String myDBMethood() throws MyDBFailure 
+0

하지만 적절한 표준 방법처럼 보이지 않습니다 : (moer 적절한 방법으로 보이는 –

0

예외적으로 예외를 던져야합니다 (기존 요구 사항이 없으면 사용자 정의 할 수 있음). 귀하의 접근 방식은 C와 같습니다.

예외를 사용할 수없는 경우 (코드를 사용하여 수행 할 작업을 결정하는 사람을 제공 할 수 있음) 열거 형을 사용하여 모든 결과가 아닌 경우 가능한 결과를 나열 할 수 있습니다. 그런 접근법은 꽤 성가시다.

0

는 반환 값과 게터 (또는 과부하 toString() 방법을)를 포함하는 문자열 필드에 자신의 Result 클래스를 작성 :

public class Result { 
    String message; 

    public Result(String message) { 
      this.message = message; 

    } 

    public String toString() { 
      return message; 
    } 
} 

또 다른 옵션은 열거 형을 사용하는 것입니다.

0

실패시 예외를 throw하고 try-catch 문에서 함수를 호출 할 수 있습니다.

문자열 형식의 전역 변수를 만들고 실패시이를 설정하고 false를 반환하면 전역 변수에서 오류 메시지를 가져올 수 있습니다.

첫 번째 요소가 반환 값이고 두 번째 요소가 오류 메시지 인 배열을 반환 할 수 있습니다.

내 개인 즐겨 찾기가 두 번째 옵션입니다.

0

CustomException을 반송 오류 코드와 함께 사용하십시오. 오류 이유를 식별하는 더 좋은 방법은 오류 조건이 발생할 때마다 열거 형을 사용하여 예외를 구성 할 수 있도록 열거 형 내에 정의하는 것입니다.

또한 필요한 경우 단일 예외로 여러 오류 코드를 처리하도록이 패러다임을 확장 할 수 있습니다.

오류 조건이 발견 될 때마다 CustomException의 인스턴스를 만든 다음이를 내 보냅니다.

//Error Condition detected 
    if(input<10) 
    throw new CustomException("Invalid Input it should be greater 
    than 10 ", ErrorCode.ErrorCode1); 

다음과 같은 여러 오류 조건을 사용할 수 있습니다. CustomException에 대한

if(intput>100 && input < 1000)//Just a sample case. 
    throw new CustomException("Invalid Input it should be not be greater 
    than 100 and less than 1000 ", EnumSet.of(ErrorCode.ErrorCode1, 
    ErrorCode.ErrorCode2)); 

출처 :

public class CustomException extends Exception { 

    private EnumSet<ErrorCode> errorCodes;// You can also maitain multiple 
              // error codes for same 
              // exception 

    public CustomException(String message, ErrorCode errorcode) { 
     super(message); 
     this.errorCodes = EnumSet.of(errorcode); 
    } 

    public CustomException(String message, EnumSet<ErrorCode> errorcode) { 
     super(message); 
     this.errorCodes = EnumSet.copyOf(errorcode); 
    } 

} 
public enum ErrorCode { 
    ErrorCode1(1, "First Error"), ErrorCode2(2, "Second Error"); 
    int code; 
    String reason; 

    private ErrorCode(int code, String reason) { 
     this.code = code; 
     this.reason = reason; 
    } 
} 
관련 문제