2012-08-31 16 views
7

Java APIに無効なコマンドライン引数の適切な例外クラスがありますか、それとも独自に作成する必要がありますか?私は1つを検索しようとしましたが、APIには何も見つかりません。Java無効なコマンドライン引数例外

これは割り当て用ですので、コマンドライン解析にサードパーティライブラリを使用することはできません。

答えて

4

未知のコマンドラインパラメータまたはプログラムに意味をなさない組み合わせを処理する最良の方法は、エラーメッセージを表示して、用途出力を提供することです。

個人的には、コマンドラインの複雑さに応じて、オプションのエラーメッセージを渡すことができる「使用法」(通常は静的)というメソッドを作成します。

プログラムに渡されたコマンドラインパラメータを解析する際に、このメソッドを呼び出して、フラグを使用して直接終了するか、またはusageメソッド呼び出し出口を使用します。

しかし、それは私だけ

0

コマンドライン引数はString[]となります。入力が特定の形式または特定の順序になることを期待している場合は、自分で作成した例外をスローして処理することができます(例外を投げるとプログラムが終了しますが、それは必須です)。

9

ほとんどの場合、受け取った引数が無効な場合は、IllegalArgumentExceptionを投げるのは一般的なイディオムです。

パブリッククラスはIllegalArgumentExceptionのRuntimeException

は、方法が不正または不適切な 引数が渡されたことを示すために をスロー延びています。

+1

私はこれを使用することを検討しましたが、私はRuntimeExceptions(未チェック例外)をチェック例外は、プログラマのコントロール外のもののために使用されるのに対し、プログラマが間違って行っている問題を反映することになっていると思ったのです。それとも、これはAPIの設計時にのみ重要ですか? – Michael

+3

実行時にプログラムが回復できない場合は、未チェックの例外を使用する傾向があります。メソッドに渡される無効な引数は、そのような場合です。プログラマのエラーです。例えば、*負の初期容量で 'ArrayList'をインスタンス化しようとすると、' IllegalArgumentException'がスローされます。どうして?それはそれを受け取ることになっていないので、負の容量では動作しません。それはプログラマのエラーです。この問題についてはhttp://www.javapractices.com/topic/TopicAction.do?Id=129で説明しています。 –

+0

また、チェック例外を使用すると、あなたを呼び出すすべてのメソッドがこの例外をキャッチする必要があります。 Imho、これはやや奇妙です。基本的には、コードにエラーがあり、他のメソッドへの無効な値や引数を渡すことができるということを認めているからです。そして、これが起こったら、あなたができることは何もありませんが、これを引き起こした*エラー*を修正してください。 –

関連する問題