如何从函数发送自定义返回消息?

时间:2012-10-01 06:24:00

标签: java

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

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

7 个答案:

答案 0 :(得分:2)

如果失败,您可以抛出已检查的custom Exception

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

答案 1 :(得分:0)

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

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

否则创建Exception的子类,并将特定原因存储为Exception的msg,或者出于特定的失败原因创建子类的其他子类:

public class MyDBFailure extends Exception

在您的方法中添加throws

public String myDBMethood() throws MyDBFailure

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

 public class Result {
     String message;

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

     }

     public String toString() {
          return message;
     }
 }

另一种选择是使用枚举。

答案 4 :(得分:0)

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

您可以创建一个string类型的全局变量,并在失败时设置该值并返回false,然后您可以从全局变量中获取错误消息。

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

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

答案 5 :(得分:0)

这是您使用throw exception的内容。您可以很好地更改方法签名并将返回值设置为boolean。然后创建一个自定义的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
    }
}

答案 6 :(得分: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;
    }
}
相关问题