DB 작업을 수행하고 성공/실패 값으로 boolean
값을 보내는 기능이 있습니다. 실패했다고 가정하고, 실패 이유를 반환 값으로 보내려고합니다.함수에서 사용자 지정 반환 메시지를 보내는 방법은 무엇입니까?
지금은 반환 값을 문자열로 정의했습니다. 실패한 경우 "failure: reason"
을 반환하고 성공하면 "success"
을 반환합니다. 하지만 이것은 좋은 습관이 아닙니다.
DB 작업을 수행하고 성공/실패 값으로 boolean
값을 보내는 기능이 있습니다. 실패했다고 가정하고, 실패 이유를 반환 값으로 보내려고합니다.함수에서 사용자 지정 반환 메시지를 보내는 방법은 무엇입니까?
지금은 반환 값을 문자열로 정의했습니다. 실패한 경우 "failure: reason"
을 반환하고 성공하면 "success"
을 반환합니다. 하지만 이것은 좋은 습관이 아닙니다.
여기는 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
}
}
. 감사합니다 :) –
실패한 경우 custom Exception
을 체크 아웃 할 수 있습니다.
public static final String DB_FAILURE_REASON1 = "failure: reason1";
그렇지 않으면 예외의 서브 클래스를 생성하고, 하나 예외의 특정 이유를 저장 :
public class DBException extends Exception{
public DBException(String exp){super(exp)}
...
}
당신은, 예를 들어 다른 클래스에 액세스 할 수 있도록 오류 메시지 정적 최종 문자열을 만들 수 있습니다 특정 실패 이유에 대한 서브 클래스의 msg
만들거나 더 서브 클래스 :
public class MyDBFailure extends Exception
그리고 추가하려면 방법에 throws
:
public String myDBMethood() throws MyDBFailure
하지만 적절한 표준 방법처럼 보이지 않습니다 : (moer 적절한 방법으로 보이는 –
예외적으로 예외를 던져야합니다 (기존 요구 사항이 없으면 사용자 정의 할 수 있음). 귀하의 접근 방식은 C와 같습니다.
예외를 사용할 수없는 경우 (코드를 사용하여 수행 할 작업을 결정하는 사람을 제공 할 수 있음) 열거 형을 사용하여 모든 결과가 아닌 경우 가능한 결과를 나열 할 수 있습니다. 그런 접근법은 꽤 성가시다.
는 반환 값과 게터 (또는 과부하 toString()
방법을)를 포함하는 문자열 필드에 자신의 Result
클래스를 작성 :
public class Result {
String message;
public Result(String message) {
this.message = message;
}
public String toString() {
return message;
}
}
또 다른 옵션은 열거 형을 사용하는 것입니다.
실패시 예외를 throw하고 try-catch 문에서 함수를 호출 할 수 있습니다.
문자열 형식의 전역 변수를 만들고 실패시이를 설정하고 false를 반환하면 전역 변수에서 오류 메시지를 가져올 수 있습니다.
첫 번째 요소가 반환 값이고 두 번째 요소가 오류 메시지 인 배열을 반환 할 수 있습니다.
내 개인 즐겨 찾기가 두 번째 옵션입니다.
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;
}
}
왜 당신은 좋은 방법이 아닙니다 생각하십니까? – manas
그게 바로 예외입니다. 실패한 경우 Exception을 발생시키고 그 이유를 메시지에 넣는다. –