如何在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); } 而已. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |