Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这种情况下如何处理错误?通过异常、布尔或其他方式_Java_Exception - Fatal编程技术网

Java 在这种情况下如何处理错误?通过异常、布尔或其他方式

Java 在这种情况下如何处理错误?通过异常、布尔或其他方式,java,exception,Java,Exception,我试图用Java创建一个响应类,它有一个方法 void setResponse(字符串响应) 不同的响应子类对响应有不同的要求。从用户处接收传递给函数的字符串 处理错误响应的正确方法是什么 函数是否应该抛出类似IllegalResponseException的异常 函数是否应该声明为 布尔setResponse(字符串响应,字符串错误消息) 如果响应错误,则返回false,并将错误消息设置为适当的值 编辑: 我希望设计UI,以便在输入正确响应之前不断提示用户进行响应。这在某种程度上取决于设置错

我试图用Java创建一个响应类,它有一个方法

void setResponse(字符串响应)

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

处理错误响应的正确方法是什么

  • 函数是否应该抛出类似IllegalResponseException的异常
  • 函数是否应该声明为 布尔setResponse(字符串响应,字符串错误消息)

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

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

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

    如果这是一个100%关键的事情,并且程序在这种情况下不应该继续,那么抛出一个异常

    如果需要调用者正确处理并继续执行程序,您可以选择其中一种,但我个人更喜欢#2。为什么?


    关于错误处理异常的一个很好的讨论是——它没有直接讨论异常与返回代码,但对检查异常的批评也有一个非常明确的负面影响列表(同样,这是假设您正在处理的错误不是导致程序终止的超关键错误,在这种情况下,未经检查的异常是正确的).

    我不明白
    字符串
    怎么会有错误的值,尤其是传递给setter函数的值。因此,您可能应该使用异常,并在使用[错误]字符串而不是设置字符串时抛出它


    <> P>也可能不是SETER负责生成错误消息字符串。我会考虑返回更紧凑的错误信息(即布尔值或枚举,或者如果错误应该包含很多细节,即使是类)。第二个选项是不可能的,因为Java中的
    String
    是不可变的。如果您认为可以执行
    errorMsg=“错误响应!”
    如果这是有用的,那么您现在需要后退一步,阅读一下
    String
    不可变的含义,以及Java按值传递所有引用的含义


    对于第一个选项,有一个经常用于此目的的,因此您可以使用它来代替您自己的自定义异常类。它扩展了RuntimeException,这意味着它是未经检查的异常。

    为异常情况保留异常


    如果您预期会出现错误,您的代码应该理所当然地处理它们,而不是到处抛出和捕获异常。

    只对错误情况使用异常,因为调用方已经(或可能已经)发生了错误,所以不应该发生错误情况足够的知识来避免它。在您的情况下,响应的有效性似乎隐藏在子类实现中,调用者无法知道“正确”的答案。这不一定是个问题(例如,响应可能是密码)但是,在我的例子中,对于一些子类,需要响应逗号分隔,或者需要对某些子类进行特定的单词,这样字符串中可能会有错误。我忘记了java中的整个不可变字符串。我正在C++中思考,并通过引用。第二,我如何检查导致错误的原因。我是否应该将返回值设置为字符串并对其进行编码,以使空字符串表示set函数未返回错误?@TP-您可以这样做。这取决于您是否需要向用户显示原因(字符串将是完美的)或出于编程原因(例如,需要一个有限值返回类型来根据原因确定程序在发生错误时应该做什么)我想向用户显示字符串。