加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在Java中返回标志和可选消息?

发布时间:2020-12-15 02:01:29 所属栏目:Java 来源:网络整理
导读:我想用 Java编写一个方法来验证某些条件是否存在某些数据,并确认数据有效或产生适当的错误消息. 问题是我们不能从一个方法返回多个东西,所以我想知道最佳解决方案是什么(在可读性和可维护性方面). 第一解决方案很容易,但我们无法知道究竟是什么使检查失败:
我想用 Java编写一个方法来验证某些条件是否存在某些数据,并确认数据有效或产生适当的错误消息.

问题是我们不能从一个方法返回多个东西,所以我想知道最佳解决方案是什么(在可读性和可维护性方面).

第一解决方案很容易,但我们无法知道究竟是什么使检查失败:

boolean verifyLimits1(Set<Integer> values,int maxValue) {
    for (Integer value : values) {
        if (value > maxValue) {
            return false; // Out of limits
        }
    }
    return true; // All values are OK
}

二解决方案.我们有消息,但我们正在以一种我们不应该使用的方式使用异常(此外,它应该是特定于域的已检查异常,过多的开销IMO):

void verifyLimits2(Set<Integer> values,int maxValue) {
    for (Integer value : values) {
        if (value > maxValue) {
            throw new IllegalArgumentException("The value " + value + " exceeds the maximum value");
        }
    }
}

第三种方案.我们有一个详细的消息,但合同不干净:我们让客户端检查String是否为空(他需要读取javadoc).

String verifyLimits3(Set<Integer> values,int maxValue) {
    StringBuilder builder = new StringBuilder();
    for (Integer value : values) {
        if (value > maxValue) {
            builder.append("The value " + value + " exceeds the maximum value/n");
        }
    }
    return builder.toString();
}

你会推荐哪种解决方案?或者有一个更好的(希望!)?

(注意:我编写了这个小例子,我的实际用例涉及异构数据的复杂条件,所以不要关注这个具体的例子并提出Collections.max(values)> maxValue?“超出范围.”:“一切都好.“:-).)

解决方法

如果您需要多个值,则应返回一个简单的类实例.以下是我们在某些情况下使用的示例:

public class Validation {
    private String          text    = null;
    private ValidationType  type    = ValidationType.OK;

    public Validation(String text,ValidationType type) {
        super();
        this.text = text;
        this.type = type;
    }
    public String getText() {
        return text;
    }
    public ValidationType getType() {
        return type;
    }
}

这对类型使用简单的枚举:

public enum ValidationType {
    OK,HINT,ERROR;
}

验证器方法可能如下所示:

public Validation validateSomething() {
    if (condition) {
        return new Validation("msg.key",ValidationType.ERROR);
    }
    return new Validation(null,ValidationType.OK);
}

而已.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读