2012-08-31 50 views
7

在Java API中是否存在適用於無效命令行參數的適當異常類,還是必須創建自己的異常類?我試過尋找一個,但在API中找不到任何東西。Java無效的命令行參數異常

這是爲了分配,所以我不能使用第三方庫進行命令行解析。

回答

4

處理未知命令行參數或對程序沒有意義的組合的最佳方式是顯示錯誤消息並提供用法輸出。個人而言,根據命令行的複雜性,我將創建一個名爲「用法」(通常爲靜態)的方法,該方法可以將可選的錯誤消息傳遞給它。

解析傳遞給程序的命令行參數時,我將調用此方法,並通過標誌或直接退出,或者爲我調用exit方法。

但是,這只是我

0

命令行參數作爲String[]進來。如果你期望輸入是以某種形式或某種順序進行的,你可以拋出一個你自己創建的異常來處理它(儘管拋出一個異常會終止程序;如果你需要處理它這是必需的)。

9

大多數情況下,當收到的參數無效時,拋出IllegalArgumentException是一種常見的習慣用法。

公共類拋出:IllegalArgumentException延伸的RuntimeException

時拋出 以表示方法已通過非法或不適當的 說法。

+1

我確實考慮過用這個,但我認爲RuntimeExceptions(unchecked異常)都應該反映的一個問題是,程序員做錯了,而檢查的異常將被用於事物的程序員的控制範圍之外。或者只有在設計API時才重要? – Michael

+3

我傾向於在程序無法在運行時恢復的情況下使用未經檢查的異常。傳遞給方法的參數無效是這種情況,這是程序員的錯誤。例如,當您嘗試實例化具有* negative *初始容量的'ArrayList'時,它將拋出'IllegalArgumentException'。爲什麼?因爲它不應該得到那個,並且它不能用負能力工作;這是程序員的錯誤。以下是討論此問題的鏈接http://www.javapractices.com/topic/TopicAction.do?Id=129。 –

+0

另外,如果您使用檢查的異常,則調用您的每個方法都需要捕獲此異常。 Imho,這有點奇怪,因爲基本上你承認你的代碼中有錯誤,使得它將* invalid * values/arguments傳遞給另一個方法。發生這種情況時,你無能爲力,但解決導致此問題的*錯誤*。 –