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

Beg*_*ner 24 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 ?????
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 33

这看起来像IllegalStateException我.

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

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

我不会为此创建你自己的例外情况,除非你预计它会故意被其他地方捕获.这听起来像这只会发生是由于编程错误,而不是一个意外的情况 ......在这种情况下,一个未经检查的例外是适当的,并IllegalStateException描述该问题的一般性质很清楚.

您可以在异常消息中添加详细原因(解释"非法状态"是列表为空).

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

请注意,如果您正在实现,则不能使用已检查的异常Runnable.run,因为未声明该异常将抛出任何已检查的异常.你必须将它包装在一个未经检查的异常中(例如RuntimeException),此时甚至会有更少的好处.


And*_*eas 7

通过子类化Exception创建自己的异常并创建一个描述性名称.

public class MyEmptyListException extends Exception {
    public MyEmptyListException(String message) {
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请参阅我的回答,为什么我*不会*这样做. (2认同)