如果list中的列为空,则抛出哪个异常?

时间:2012-06-26 05:51:10

标签: java

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

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 ?????
        }
    }
}

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

5 个答案:

答案 0 :(得分:33)

对我来说就像IllegalStateException

  

表示在非法或不适当的时间调用了某个方法。

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

我不会为此创建自己的例外情况,除非您预计会故意在其他地方发现它。这样的声音只会由于编程错误而不是意外的情况而发生......在这种情况下,未经检查的异常是合适的,IllegalStateException描述问题的一般性质非常清楚。

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

我建议你尽量避免为每一个可能出错的小东西创建一个单独的异常类型 - 除非你单独捕获这些异常,不同的类型没有帮助;它只会增加杂乱。具有正确宽泛类型但具有有用消息的异常在没有太多认知开销的情况下提供了同样多的好处。

请注意,如果您正在实现Runnable.run,则无法使用已检查的异常,因为未声明它会抛出任何已检查的异常。你必须将它包装在一个未经检查的例外(例如RuntimeException),此时它的利益会更少。

答案 1 :(得分:7)

通过继承Exception并创建一个描述性名称来制作自己的例外。

public class MyEmptyListException extends Exception {
    public MyEmptyListException(String message) {
        super(message);
    }
}

答案 2 :(得分:3)

我会抛出一个IllegalArgumentException。正如Javadoc所解释的那样,它被抛出以表示某个方法已经被传递了非法或不恰当的参数&#34;。

答案 3 :(得分:2)

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

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

请找一些我发现有助于理解异常处理的链接..

  1. Best Practices for Exception Handling
  2. Does Java need checked Exceptions
  3. Unchecked Exceptions

答案 4 :(得分:0)

你应该抛出User defined Exception

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