2

我有一个执行数据库操作并发送boolean成功/失败值的函数。假设它失败了,我想将失败原因作为返回值发送。

现在,我已经将返回值定义为一个字符串。如果失败我返回"failure: reason",如果成功,我返回"success"。但这不是一个好习惯。

4

7 回答 7

2

在失败时,您可以抛出一个已检查的custom Exception.

public class DBException extends Exception{
  public DBException(String exp){super(exp)}
  ...
}
于 2012-10-01T06:27:13.730 回答
0

您可以将错误消息设置为静态最终字符串,以便其他类能够访问它们,例如:

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

否则,创建异常的子类,并将特定原因存储为异常,或者msg为特定的失败原因创建子类的更多子类:

public class MyDBFailure extends Exception

并将 a 添加throws到您的方法中:

public String myDBMethood() throws MyDBFailure
于 2012-10-01T06:28:07.883 回答
0

理想情况下,您应该抛出异常(如果现有的都不适合您的需要,您可以自定义它们)。你的方法更像C。

如果你真的不能使用异常(这将提供谁曾经使用你的代码来决定做什么),你可能会求助于枚举,列出一些可能的结果,如果不是全部的话。请注意,这种方法可能非常麻烦。

于 2012-10-01T06:28:53.063 回答
0

使用包含返回值和 getter(或重载方法)的字符串字段编写您自己的Result类:toString()

 public class Result {
     String message;

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

     }

     public String toString() {
          return message;
     }
 }

另一种选择是使用枚举。

于 2012-10-01T06:28:56.287 回答
0

您可以在失败时抛出异常并在 try-catch 语句中调用该函数。

您可以创建一个字符串类型的全局变量并将其设置为失败并返回 false,然后您可以从全局变量中获取错误消息。

您可以返回一个数组,其中第一个元素是返回值,第二个元素是错误消息。

我个人最喜欢的是第二种选择。

于 2012-10-01T06:28:57.053 回答
0

这就是你的用途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
    }
}
于 2012-10-01T06:29:21.183 回答
0

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;
    }
}
于 2012-10-01T06:30:10.543 回答