在下面的代码中,如果在String列表中找不到元素,我会抛出异常。
import java.util.ArrayList;
import java.util.List;
public class TestException {
private static List<String> strList = new ArrayList<String>();
static {
strList.add("1");
strList.add("2");
}
public static void main(String argsp[]) {
try {
String res = new TestException().findId("1");
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
}
try {
String res = new TestException().findId("11");
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
}
}
private String findId(String id) throws Exception {
for(String str : strList){
if(id.equalsIgnoreCase(str)){
return str;
}
}
throw new Exception("Exception Thrown - element not found");
}
}
当运行输出为:
1
java.lang.Exception: Exception Thrown - element not found
at com.fmr.fc.portlet.actionabledashboard.throttling.TestException.findId(TestException.java:40)
at com.fmr.fc.portlet.actionabledashboard.throttling.TestException.main(TestException.java:24)
为了保持代码量低的问题我正在抛出异常,但我会抛出一个自定义异常。 我抛出异常的原因是自定义异常被进一步调用堆栈以指示错误。
但以这种方式抛出异常是不好的做法 - 如果找不到id,findId会抛出异常吗?
答案 0 :(得分:1)
是的,这是不好的做法。您应该编写一个传递布尔值的函数,并允许程序使用它来确定要执行的操作。
例外应该仅用于处理非常罕见的,完全不可避免的事件。它们不应该是代码标准逻辑的一部分,它们(惊喜!)是规则的例外。可能(可能)发生的事情,但是非常不可能,你真的,真的找不到阻止它们的方法。
答案 1 :(得分:0)
一般来说,在这种情况下抛出异常是不好的做法。尝试修改函数以返回guava模式中使用的Optional。一些细节here: