如何从validate()方法返回失败状态和失败原因

时间:2015-06-15 07:22:22

标签: java

我有一个类,其目的是存储一些配置参数。

我需要添加一个方法validate(),它检查当前状态下该类对象的参数的有效性。

我需要将两个信息返回给validate()方法

的调用者
  1. 表示有效性的boolean
  2. 提供验证失败原因的String
  3. 在java世界中这样做的正确方法是什么?

    我可以想到几种方法,但无法确定哪种方式更好。

    1. validate()返回包含失败的字符串 原因,如果没有错误,则为null。感觉这是一个黑客。
    2. 如果验证失败,则抛出失败原因的异常。这似乎 不正确,因为验证失败不是特殊情况 validate()
    3. 创建一个类来保存验证状态和失败原因 返回一个对象。这看起来像是太费力了 简单的要求。

4 个答案:

答案 0 :(得分:1)

  

在java世界中这样做的正确方法是什么?

没有(单一)正确的方法。

我同意退回Stringnull很难看。

我不同意创建一个类太多了。客观地说,手动编写需要5分钟,如果使用体面的IDE则需要1到2分钟。很难说这是“太多”。

使用异常是否是好的风格是有争议的。这取决于你对异常处理的看法(或“宗教”)。

答案 1 :(得分:1)

这三个建议都没问题。选择哪一个在很大程度上取决于背景:团队编码指南,公司编码原则,团队规模,代码大小......

我认为,3)是最优雅的解决方案。努力并不是那么大......

只要在JavaDoc中记录得很好,

1)就完全可以了,所以没有一个调用者感到惊讶。在JSE中,有很多方法返回调用者需要检查的特殊值(null,-1,...)。

2)更值得怀疑。但是,如果项目特定需要像ValidationException那样可以在代码中的其他地方使用,那么它也可能是一种可接受的方式。但是,可能是所有变体的最差表现。

答案 2 :(得分:0)

我会说这取决于你的程序和validate()的来电者。如果您认为验证是一个内部实现,在程序的一般流程中几乎没有可见性,则选项1(这是非常常见的)很简单且足够。然而,如果对象保持参数是公共的并且validate()可以在您的程序中使用,那么选项3就是“Java”对您的期望。

选项2永远不会更好,因为你说的原因。另一个论点是使用控制流的异常,这使得程序更难以推理。

答案 3 :(得分:0)

我可以想到以下模式:

  • 执行验证的“Validator”类,以及您可以获取原因的地方;
  • 抛出异常,提供原因的异常;
  • 有理由记录错误。