2012-06-26 46 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所解釋的那樣,它「被拋出來表明一種方法已被通過非法或不恰當的論點」。

相關問題