- ベストアンサー
エラー処理
エラー処理について質問です。 私はどうもVBのエラー処理が頭についているせいか、Javaの例外処理等が面倒に見えてならないんです。 例えば下記はVBのエラー処理なんですが、引数を得て計算して値を返すというものなのですが、引数自体が間違えてたら意味ないということでチェックします。 色んなチェックをして1つでも間違えてたらVVV_ERRORに飛びます。 下記のように「桁数チェック」とか「数値か?」とか調べる場合、Javaだとどのようにして書いたらいいのでしょう? Javaならtry文に全部入れてしまえばいいのでしょうが… .....例 try { x = 10 / 5; y = 20 / 0; //エラー } catch ( ArithmeticException ex ) { System.out.println (" 0で割ることはできません"); .....略 要は下記VBのようにモジュールごとに独自のエラーコードが存在する場合、どうエラー処理を書いたらいいのかということです。 皆さんならどうしますか?よろしければご意見等お願い致します。 //////////////////////////////////////////////////////////////// public Function VVV(YYYYMMDD As String , Kotae As String) As String ...... vvv_err = "" On Error GoTo VVV_ERROR '***************引数チェック '8桁か? If Len(YYYYMMDD) <> 8 Then vvv_err = "8桁ではありません" GoTo VVV_ERROR End If '数値か? If IsNumeric(YYYYMMDD) = False Then vvv_err = "数値ではありません" GoTo VVV_ERROR End If .....略(同じようなIf文の引数チェックがたくさんあります) '***************ERROR処理 VVV_ERROR: vvv_err = vvv_err & err.Description & err.Number .....略
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Javaについて勘違いしていませんか??Javaにもif文はありますし、また、Javaはtry-catchでチェックをしなければならないわけではありません。 例えば、Function VVVは以下のように書き換えることができます。 public String VVV(String YYYYMMDD, String Kotae) throws YYYException { if(YYYYMMDD.length()!=8) { throw new YYYException("8桁ではありません"); } try { Integer.parseInt(YYYYMMDD); } catch (NumberFormatException e) { throw new YYYException("数値ではありません"); } return "???"; } 例外についての詳しい説明は参考URLを参照してください。ちなみにEclipseを使えば例外をキャッチしなければいけない部分は補完してくれるし、それほど面倒ではなくなります。
その他の回答 (1)
- braver_2004
- ベストアンサー率62% (20/32)
私なら、Exceptionクラスを継承したクラスを自作して、チェック結果にひっかかった場合、自作したExceptionをthrowしますが。そうすれば任意の部分で処理を中断することも出来ますし、try-catch句内部でその他のExceptionが発生すればそれ自体もthrowすることができますし。 それで呼び出し側で自作したExceptionをcatchすればちゃんとエラーハンドルできますよね。 Exceptionを詳しく切り分ける必要がなければExceptionそのものをメッセージ付でnewして、throwしてもいけると思います。
お礼
自作について色々調べてみました。 おかげさまで意味がわかりました。 きっかけになったことを感謝します^^ お返事ありがとうございました!
お礼
滅相もございません^^; 単に私の勉強不足です汗 書いていただいた例文でイメージをつかむことが出来ました。 色々調べていくうちに書いていただいた例文の意味がわかりました。 ドアホゥな質問をして申し訳ないです; お返事ありがとうございました!