1

我厌倦了在我的代码中添加看似无穷无尽的 if-else 语句,所以我想知道如果我只是在出现问题时捕获异常是否会更好。例如。而不是说:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    if(word != null) {
        if(array.length > 0) {
            return word.equalsIgnoreCase(array[0]);
        }
    }
    return false;
}

我只是有:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    try {
        return word.equals(array[0]);
    } catch(/*NullPointerException or an ArrayIndexOutOfBoundsException*/ Exception e) {
        return false;
    }
}

请注意,我确实知道我可以在 if 语句中使用多个参数,但我只是对哪种方法在实践中更好用以及为什么更感兴趣。

提前致谢!

4

5 回答 5

6

不,这不是一个好主意,那是对异常处理的滥用。

您应该避免不必要的异常捕获,异常应该只用于出错的事情,因为它们超出了您的控制范围,而不是正常程序流程的一部分。此外,正如@SJuan76 所说,您将隐藏存在真正异常的情况。

如果您厌倦了使用if-else语句,您可以尝试使用 a switch(它甚至适用于 Java 7 中的字符串)或改进应用程序中的多态性。

于 2013-05-17T00:06:22.733 回答
4

一般规则是,“对异常事件使用异常,从不用于控制流”。

所以if(...) else ...请使用。

于 2013-05-17T00:08:37.037 回答
3

首先,IIRC 正确的异常处理速度很慢。不是很慢,但没有你想在主流逻辑中使用的东西。

其次,通过这种方式,您将隐藏存在真正异常的情况。您的用户将尝试加载文件,但只会发现该文件未加载,如果未找到该文件,则不会知道数据是否已损坏,等等。你会丢失很多信息。

如果你想让你的代码更简单,最好做类似的事情

/**
 * ....
 * @param word String must not be null.
 * @param array String[] must not be null, have length at least 1, an array[0] must not be null
 */
public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
  return word.equals(array[0]);
}

至少您将清理参数的责任委托给使用您的方法的代码。这不是一件明智的事情(它违背了防御性编程),你的同事会讨厌使用你的代码,但比你的第一种方法更好。

于 2013-05-17T00:12:33.113 回答
0
do {
    if (conditionA) {
        something;
    }
    else {
        break;
    }
    if (conditionB) {
        somethingElse;
    }
    else {
        break;
    }
    ...
} while(false);
于 2013-05-17T00:16:48.640 回答
0

异常方法不是一个好主意。抛出异常 1. 它很慢 2. 使您的应用程序不可读。正如@greedybuddha 所说“对异常事件使用异常,从不用于控制流”。

于 2013-05-17T01:01:33.150 回答