自定义例外或空列表

时间:2013-12-26 15:11:53

标签: java arrays class exception convention

我正在开发一个解析文本的项目。我正在解析特定的文本并将它们存储在数组中。我为它写了一堂课。如果我得到不正确的文本,以便在给定的输入中找不到我想要的内容,那么最佳实践是什么,我应该返回空数组并让调用类处理它,还是应该向调用类引发自定义异常。 / p>

4 个答案:

答案 0 :(得分:2)

如果我使用你的类作为库并且收到一个空数组作为返回值,我会假设 - 除非文档另有说明 - 没有读过任何内容(如果我的输入有文本可读,那就很困惑!)

同样地,我希望当一段库代码抛出异常时,它会抛出一些有用的东西,以便我可以调试问题。这可能以自定义异常的形式出现,或者可能以现有库异常的形式出现;例如,ParseException,它将偏移量提供给发生异常的文本。但是,如果存在与您的特定情况相关的其他信息,则可能需要自定义Exception子类。

答案 1 :(得分:1)

如果调用方的empty-list视图错误,即调用方总是除了列表中的某些值,并且处理空列表在他的情况下通常不是一个自定义异常更好的信号。

对于示例:如果来电者有category输入和合同,那么您的API将有product,根据合同,空虚是错误的。

现在,如果调用者和API之间没有上述紧密合约的用例,发送空列表就完全有效。

对于示例:来电者要求提供XYZ文章列表而您没有,可以使用空文章列表。

这纯粹是主观的和用例驱动的,Java没有提供任何具体的指导原则。

答案 2 :(得分:1)

由于每个设计案例都不同,因此很难有“最佳实践”。根据经验,考虑哪种API对于您的消费者来说最容易使用,并且最不令人惊讶。如果你还没有看过,我还强烈建议你拿一份约书亚布洛赫的Effective Java副本。特别适用的是“使用异常条件例外”和“赞成使用内置异常”(以及该书包含许多其他良好风格和正确性建议)的部分。

现在针对您的具体情况:

您的用户是否应该提供正确的文字或不正确的文字作为输入?如果是前者,则异常更可能是正确的解决方案。此外,如果您返回一个空数组,那么恰当的文本恰好是空的,与不正确的文本之间有什么区别?你能告诉你的通话代码有什么不同吗?这种区别是否重要?

现在抛出什么异常?您可以抛出IOException的子类(因为您正在处理输入),(可以说)潜在的缺点是IOException不是RuntimeException所以任何调用您的代码的人都将被强制处理异常或重新抛出它。 (Checked与Unchecked异常是另一个争论)。

答案 3 :(得分:1)

这取决于你在做什么。如果不正确的文本是常见的和预期的事情,简单地忽略它并返回一个空数组(或null)可能是完全合理的。但是,如果不应该发生不正确的文本并且对先前或后续处理的输入(可能已经添加到数组中)的有效性提出质疑,那么您应该抛出异常。