在这种情况下如何处理错误?通过例外或布尔或其他

时间:2010-04-25 08:07:29

标签: java exception

我正在尝试在Java中创建一个具有方法

的Response类
  

void setResponse(String response);

不同的响应子类对响应有不同的要求。传递给函数的字符串是从用户接收的。

处理错误回复的正确方法是什么?

  1. 该函数是否应抛出异常,如IllegalResponseException
  2. 该函数是否应声明为
      

    boolean setResponse(String response,String errorMsg)

  3. 如果响应错误则返回false并将错误消息设置为适当的值

    编辑: 我想设计UI,以便在输入正确的用户之前不断提示用户进行响应。

5 个答案:

答案 0 :(得分:2)

为特殊情况保留例外。

如果您期待错误,您的代码应该理所当然地处理它们,而不是抛出并捕获所有地方的异常。

答案 1 :(得分:1)

这在某种程度上取决于您在设置错误响应时希望程序执行的操作。

如果它是100%关键的东西并且该程序永远不会在这种情况下继续进行,则抛出异常。

如果调用者需要正确处理并继续执行程序,你可以做任何一个,但我个人更喜欢#2。为什么呢?

关于错误处理异常的一个很好的讨论是here - 它没有直接解决异常与返回代码的关系,但是对于已检查异常的批评的一个非常明确的缺点列表也适用于这个讨论(同样,这个假设您正在处理的错误不是一个超级关键错误,应该导致程序终止,在这种情况下,未经检查的异常是正确的。)

答案 2 :(得分:1)

第二个选项是不可能的,因为Java中的String是不可变的。如果你认为你可以做errorMsg = "Wrong response!"并且有用,那么你需要立即退一步,读一下String对于不可变的意义,以及它对Java意味着什么按值传递所有引用。

对于第一个选项,有一个IllegalArgumentException通常用于此目的,因此您可以使用它而不是您自己的自定义异常类。它extends RuntimeException,意味着它是未经检查的例外。

答案 3 :(得分:0)

我没有看到String如何具有错误的值,尤其是传递给setter函数的值。因此,您应该使用异常,并且可能在使用[错误]字符串时抛出它,而不是设置。

生成错误消息字符串也可能不是setter的责任。我会考虑返回更紧凑的错误信息(即布尔值或枚举,如果错误应包含大量细节,甚至是类),并在另一个类中展开它。

答案 4 :(得分:0)

仅对错误情况使用异常,因为调用者具有(或可能具有)足够的知识来避免错误。在您的情况下,响应的有效性似乎隐藏在您的子类实现中,调用者无法知道“正确”的答案。不一定是问题(例如,响应可能是密码),但是您应该返回错误代码而不是抛出异常。