gpt4 book ai didi

java - 对抛出异常的一些困惑

转载 作者:行者123 更新时间:2023-11-30 08:21:37 25 4
gpt4 key购买 nike

我有一个名为 Handle 的类,它主要管理服务器的嵌入式(图形)数据库。在企业 bean 框架的高层,有一个 bean 管理这个对象,并公开可以被各种用户/bean 等调用的 web 服务。

此类所做的其中一件事是根据模式验证提交。有很多可能的检查。例如,如果您想在数据库中创建一个图形,它将根据模式验证您的提交,并检查它是否内部一致,并在尝试访问数据库之前进行所有这些检查。

现在,这个验证方法表面上是一个 boolean 函数,但实际上它从不返回 false,它要么返回 true,要么抛出一个异常,详细说明它是如何失败的。

现在这似乎是一个典型的案例,您通常不会抛出异常,因为完全可以预见有些验证将失败,事实上,这几乎是进行验证的关键。

另一方面,如果您不抛出异常,就无法通知调用该函数的 bean,最终用户也无法从那里知道他的提交验证失败的确切原因。他只是得到“假”回来。目前,bean 会处理异常,并根据抛出的异常向用户返回一条短消息,详细说明它是如何失败的。

这是对异常的有效使用吗?我应该在这里使用其他模式吗?

一切正常,但它似乎违反了异常的一般原则,即它们应该很少见并且指的是不可预测的行为。

最佳答案

我不会在这种情况下使用异常(exception),因为验证失败是异常(exception)结果。

由于您需要传输比简单的 ok/not ok 更多的信息,我会使用返回 Enumeration ValidationStatus 的验证方法,其中每个枚举值对应于当前抛出的异常之一或包含枚举和附加信息的对象 ValidationResult 以解决问题:

public enum ValidationStatus {
SUCCESS, ERROR1, ERROR2
}

public class ValidationResult {

private ValidationStatus status;
private String errorMessage;

public ValidationResult(ValidationStatus status, String errorMessage) {
this.status = status;
this.errorMessage = errorMessage;
}

public boolean isValid() {
return status == ValidationStatus.SUCCESS;
}

public ValidationStatus getStatus() {
return status;
}

public String getErrorMessage() {
return errorMessage;
}
}

我想创建这些 ValidationResults 可以在当前抛出异常的相同位置发生。

关于java - 对抛出异常的一些困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25082728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com