2012-06-26 72 views
21

我有一个关于抛出哪个异常以下疑问,如果列表为空如果在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 ????? 
     } 
    } 
} 

我乳宁批这里面的代码,我想抛出一些异常,将停止执行批处理。

回答

30

对我来说看起来像IllegalStateException

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

基本上你的对象不是在调用run的有效状态。

我不会为此创建自己的例外情况,除非您希望在其他地方故意抓到它。它听起来像这样只会发生,因为编程错误,而不是一个意想不到的情况 ...在这种情况下,一个未经检查的例外是适当的,IllegalStateException很清楚地描述了问题的一般性质。

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

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

请注意,您不能使用checked异常,如果你正在实施Runnable.run反正没有被声明为抛出checked异常。您必须将其包装在未经检查的例外情况下(例如RuntimeException),此时效益甚微。

+0

谢谢Jon ... !!是的你是对的我不能在Runnable.run()中使用检查过的excpetions。所以我使用IllegalStateException – Beginner

+0

'if(contractFileList.isEmpty()){ throw new IllegalStateExcpetion(“contractFileList is empty”); – Beginner

+0

希望这是正确的。请注意 – Beginner

6

通过继承Exception来制定您自己的例外情况并提供一个描述性名称。

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

查看我的答案,为什么我*不会*做到这一点。 –

0

你应该丢掉User defined Exception

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

+0

*为什么*你认为OP应该为此创造一个新的例外,出于兴趣? (我的答案解释了为什么我不认为他们应该。) –

0

我会抛出IllegalArgumentException。正如Javadoc所解释的那样,它“被抛出来表明一种方法已被通过非法或不恰当的论点”。

相关问题