Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在引发异常以指示未找到元素_Java_Design Patterns - Fatal编程技术网

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)