30

如果列表为空,我对抛出哪个异常有以下疑问

public class XYZ implements Runnable {
    private List<File> contractFileList;

    @Override
    public void run() { 
        contractFileList = some method that will return the list;
        //now i want to check if returned contractFile is empty or not , if yes then raise the exception
        if (contractFileList.isEmpty()) {
            // throw new ?????
        }
    }
}

我在批处理中运行此代码,我想抛出一些异常来停止批处理执行。

4

5 回答 5

39

在我看来是这样IllegalStateException的。

表示方法已在非法或不适当的时间被调用。

基本上,您的对象不处于run被调用的有效状态。

我不会为此创建您自己的例外,除非您希望它在其他地方被故意捕获。听起来这只会由于编程错误而不是意外情况而发生......在这种情况下,未经检查的异常是合适的,并且IllegalStateException非常清楚地描述了问题的一般性质。

您可以在异常消息中详细说明原因(解释“非法状态”是列表为空)。

我建议你尽量避免为每一个可能出错的小事情创建一个单独的异常类型——除非你分别捕获这些异常,否则拥有不同的类型并没有帮助;它只会增加混乱。具有正确广泛类型但具有有用信息的例外提供了同样多的好处,而没有太多的认知开销。

请注意,如果您仍然要实现,则不能Runnable.run使用已检查异常,因为未声明抛出任何已检查异常。您必须将其包装在未经检查的异常(例如RuntimeException)中,此时好处更少。

于 2012-06-26T05:55:20.703 回答
6

Exception通过子类化并创建一个描述性的名称来创建您自己的例外。

public class MyEmptyListException extends Exception {
    public MyEmptyListException(String message) {
        super(message);
    }
}
于 2012-06-26T05:52:54.580 回答
3

如果我要创建任何自定义异常类,我会牢记这些要点。

  • 确保在整个应用程序中处理异常的方法一致。
  • 新的自定义异常是否会向使用您的方法的开发人员提供有关如何从异常中恢复的更多信息?

请找到一些我发现对理解异常处理有用的链接..

  1. 异常处理的最佳实践
  2. Java是否需要检查异常
  3. 未经检查的异常
于 2012-06-26T06:41:04.847 回答
3

我会抛出一个IllegalArgumentException. 正如Javadoc解释的那样,它“被抛出以表明一个方法已被传递了一个非法或不适当的参数”。

于 2015-04-25T19:28:11.877 回答
0

你应该扔User defined Exception.

您应该创建自己的异常类,然后抛出它。

于 2012-06-26T05:54:16.837 回答