我厌倦了在我的代码中添加看似无穷无尽的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语句中使用多个参数,但我只关心在实践中哪种方法更好用,以及为什么。
提前致谢!
答案 0 :(得分:6)
不,这不是一个好主意,那就是滥用异常处理。
您应该避免不必要的异常捕获,异常应仅用于出错的事情,因为它们不在您的控制范围内,而不是正常程序流程的一部分。此外,正如@ SJuan76所说,你将隐藏存在真正异常的情况。
如果您厌倦了使用if-else
语句,则可以尝试使用switch
(在Java 7中甚至work for strings)或改进应用程序中的polymorphism。
答案 1 :(得分:4)
一般规则是,“使用异常事件的异常,永远不使用控制流”。
请使用if(...) else ...
。
答案 2 :(得分: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]);
}
至少您将用于清理参数的责任委派给使用您的方法的代码。这不是一个明智的事情(它违背了防御性编程),你的同事会讨厌使用你的代码,但比你的第一种方法更好。
答案 3 :(得分:0)
do {
if (conditionA) {
something;
}
else {
break;
}
if (conditionB) {
somethingElse;
}
else {
break;
}
...
} while(false);
答案 4 :(得分:0)
异常方法不是一个好主意。 抛出异常 它很慢 2.使您的应用程序不可读。 正如@greedybuddha所说的那样“对特殊事件使用例外,从不使用控制流”。