我有一个执行数据库操作并发送boolean
成功/失败值的函数。假设它失败了,我想将失败原因作为返回值发送。
现在,我已经将返回值定义为一个字符串。如果失败我返回"failure: reason"
,如果成功,我返回"success"
。但这不是一个好习惯。
我有一个执行数据库操作并发送boolean
成功/失败值的函数。假设它失败了,我想将失败原因作为返回值发送。
现在,我已经将返回值定义为一个字符串。如果失败我返回"failure: reason"
,如果成功,我返回"success"
。但这不是一个好习惯。
在失败时,您可以抛出一个已检查的custom Exception
.
public class DBException extends Exception{
public DBException(String exp){super(exp)}
...
}
您可以将错误消息设置为静态最终字符串,以便其他类能够访问它们,例如:
public static final String DB_FAILURE_REASON1 = "failure: reason1";
否则,创建异常的子类,并将特定原因存储为异常,或者msg
为特定的失败原因创建子类的更多子类:
public class MyDBFailure extends Exception
并将 a 添加throws
到您的方法中:
public String myDBMethood() throws MyDBFailure
理想情况下,您应该抛出异常(如果现有的都不适合您的需要,您可以自定义它们)。你的方法更像C。
如果你真的不能使用异常(这将提供谁曾经使用你的代码来决定做什么),你可能会求助于枚举,列出一些可能的结果,如果不是全部的话。请注意,这种方法可能非常麻烦。
使用包含返回值和 getter(或重载方法)的字符串字段编写您自己的Result
类:toString()
public class Result {
String message;
public Result(String message) {
this.message = message;
}
public String toString() {
return message;
}
}
另一种选择是使用枚举。
您可以在失败时抛出异常并在 try-catch 语句中调用该函数。
您可以创建一个字符串类型的全局变量并将其设置为失败并返回 false,然后您可以从全局变量中获取错误消息。
您可以返回一个数组,其中第一个元素是返回值,第二个元素是错误消息。
我个人最喜欢的是第二种选择。
这就是你的用途throw exception
。您可以很好地更改方法签名并将返回值设置为布尔值。然后创建一个自定义异常类:
public class MyCustomException extends RuntimeException {
// define error code, error message etc.
// create getters & setters
}
之后,每当您找到失败的原因时,请执行以下操作:
if (some_failure_reason == true) {
throw new MyCustomException(error_code) ;
}
在您的控制器(或服务)中,捕获异常:
try {
// call the method in question
} catch (MyCustomException mce) {
if(mce.getErrorCode() == some_error_code) {
// do stuff
}
}
CustomException
与返回错误代码一起使用。识别错误原因的一种更好的方法是在枚举中定义它,以便每当发生错误情况时,您都可以使用枚举构造异常。
如果需要,您还可以扩展此范例以处理单个异常中的多个错误代码。
每当检测到错误条件时,创建实例CustomException
然后抛出它。
//Error Condition detected
if(input<10)
throw new CustomException("Invalid Input it should be greater
than 10 ", ErrorCode.ErrorCode1);
您可以使用多个错误条件,如下所示。
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));
来源CustomException
:
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;
}
}