Java 正在引发异常以指示未找到元素
在下面的代码中,如果在字符串列表中找不到元素,我将抛出一个异常Java 正在引发异常以指示未找到元素,java,design-patterns,Java,Design Patterns,在下面的代码中,如果在字符串列表中找不到元素,我将抛出一个异常 import java.util.ArrayList; import java.util.List; public class TestException { private static List<String> strList = new ArrayList<String>(); static { strList.add("1"); strList.a
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");
}
}
为了在提问时保持低代码量,我抛出了一个异常,但我将抛出一个自定义异常。
我抛出异常的原因是,自定义异常会被捕获到调用堆栈的更深处,以指示错误
但是,以这种方式引发异常是一种不好的做法吗?findId是在找不到id时引发异常?通常,在这种情况下引发异常是一种不好的做法。尝试修改函数以返回番石榴图案中使用的可选值。一些细节:是的,这是不好的做法。您应该编写一个传递布尔值的函数,并允许程序使用它来确定要执行的操作
例外情况只能用于处理非常罕见、完全不可避免的事件。它们不应该是代码标准逻辑的一部分,它们(令人惊讶!)是规则的例外。可能(可能)发生但不太可能发生的事情,并且您真的、真的无法找到阻止它们的方法。该项目是否应该在列表中(在这种情况下,如果不在列表中则为错误)或者该项目不在列表中是正常的吗?@immibis该项目在列表中是正常的,但该项目不在列表中也是正常的吗?@immibis否,这不是正常行为(但可能发生)。一般来说,发生异常时应引发异常。如果有一个方法将字符串转换为整数,而该字符串不是有效的整数,则它应该引发异常。如果有一个方法告诉你一个字符串是否是有效的整数,它不应该抛出异常(它应该只返回false)。“异常应该只用于处理非常罕见的、完全不可避免的事件。”我不同意,每次你不知道如何纠正故障时,都必须执行异常。我同意,故障是异常用例的子集,但不是唯一的子集。另一种用法可能类似于InterruptedException,从技术上讲,没有什么失败,但程序流中的突然变化需要发送回堆栈。我确实认为在这个问题的背景下,这个定义是有帮助的,但你是对的,它在更大的意义上太模糊了。。。
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)