如何正确处理默认变量值不正确

时间:2012-04-09 12:04:49

标签: java

这可能是一个基本问题,通过代码更好地解释:

    public void checkStatus {
        int status = UNKNOWN;
        if (somecondition) {
             status = STATUS_UP;
        } elseif (someothercondition) {
             status = STATUS_DOWN;
        }
    }

所以问题是,根据定义,我不知道可能影响STATUS的所有可能条件,并且我不希望编译器通过不初始化status局部变量来抛出'my not be defined'错误。 / p>

底线我的应用程序无法使用状态设置为UNKNOWN,我只是将其设置为关闭编译器。

问题:如何优雅地处理这个问题,如果状态仍然设​​置为UNKNOWN,我已经考虑在方法结束时抛出一个致命的异常,但这感觉有点'难看'。

谢谢。

4 个答案:

答案 0 :(得分:1)

你可以将status变量的某个默认值置于其他条件中,这样如果没有传递任何if条件,那么at-least status会得到一些默认值。

答案 1 :(得分:1)

我建议您尝试枚举而不是整数。

你的代码可以使用UNKNOWN状态 - 如果你正在编写if / else if / else或者使用switch时的默认条件,那么你将从else子句返回。

抛出异常也可以。这是你的设计选择。如果未知状态确实是特殊情况,则应使用例外。如果它很常见,我会倾向于枚举。

答案 2 :(得分:1)

答案 3 :(得分:1)

我总是将throw放在if / then / else链的末尾,并且不要将默认值预先分配给变量。如果抛出异常,它不仅会告诉我应用程序无法继续,还会报告无法继续执行的原因。而且,一旦发现它无法继续,它就会这样做,这对于错误报告非常有用(通常,您希望尽快报告错误)。

有一种特殊情况,当您构建代码时,somecondition s的组合使得永远不会从{{1}的尾部运行链,但编译器无法自动验证它。例如,您之前验证了输入,并且您知道代码中没有可以更改它的路径。在这种特定情况下,您应该使用断言而不是抛出异常,因为它表示您对代码的推理出错,而不是简单的编码错误。