- ベストアンサー
メソッドは値を返さないというエラー?
お世話になります。 JAVAでプログラミングを始めたものですが、本を参考にコーディングしてコンパイルするとエラーになってしまいます。考え方がダメなのか何か足りないのか良く分かりません。 private long longValue(String A,long def) { long val = def; try { if (A != null && !A.equals("")) val = Long.parseLong(A); } catch (NumberFormatException e) { return val; } } エラーは、method dose not return a valueです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
1.catch (NumberFormatException e) {} return val; 2.catch (NumberFormatException e) { return val; } return val; } ↑の結果は全く変わりません。 ただし try~catch文というのは例外が発生したときのリカバリーのための処理を記述する方法ですので、意味が異なります。 1の場合、long型への変換の最中に発生する NumberFormatException は、プログラムの処理の中で「無視する」「処理を続ける」べきエラーとして認識しています。 2の場合、NumberFormatException はエラーとして認識され、このエラーが発生した場合には、リカバリー処理として val を返却値として返すことを明確にします。 どちらが適切かは、この longValue() がどのような場合に呼ばれるのかを考えた上で判断すべきです。。。 今の場合には、それこそどちらでもいいように思いますが。。。 もっと複雑なプログラムになった場合には、そのエラーを無視するのか、それともリカバリーの処理を行うのかを考える必要があるということですね。 ちなみに、 private long longValue(String A,long def) { long val = def; try { if (A != null && !A.equals("")) val = Long.parseLong(A); } catch (NumberFormatException e) { // 例外が発生したことを表すメッセージや、 // エラーをリカバリーする処理を記述する } finally { return val; } } のように記述して、例外が発生してもしなくても、val を返却値とするのも1つの方法だと思いますね。 こう記述すると、他の人が見たときに、NumberFormatException が発生するのは想定外の値が来た場合だが、問題ないので val を返却してると言うことが、明確になります。
その他の回答 (2)
> 参考書には、 > catch (NumberFormatException e) > return val; > となっていて、{}がありません。 > 無い文法があるとか? 本当に {} がなければ、誤植ということではないでしょうか。 おそらく、参考書が記述したいのは try { if (A != null && !A.equals("")) val = Long.parseLong(A); } catch (NumberFormatException e) {} return val; だと思われます。 上記のように記述すると、「String A」が long型 に変換できれば その値を、変換できなければ、デフォルト値として「long def」の 値を返却するようになりますが。
お礼
回答ありがとうございました。 単にミスプリ?だったのでしょうかね。 通常は、{}を省略するものではないと思うのですが・・。 回答をいただいた catch (NumberFormatException e) {} return val; と catch (NumberFormatException e) { return val; } return val; } とでは意味が違うのでしょうか? ちょっと疑問になりました。
- yuji
- ベストアンサー率37% (64/169)
Exceptionが発生しない場合に実行するreturn文が ないからエラーになります。 private long longValue(String A,long def) { long val = def; try { if (A != null && !A.equals("")) val = Long.parseLong(A); } catch (NumberFormatException e) { return val; } return val; // ここに return 文がないからエラー } ※でも、これだと、catch () { }の中のreturn文の 存在意義がなくなりますが。
お礼
早々の回答ありがとうございます。 参考書には、 catch (NumberFormatException e) return val; となっていて、{}がありません。 無い文法があるとか? 例外処理として文字列を整数に変換できなかた場合valのみを返すだけで良いのですが・・・。 ご指摘の通り追加したところエラーは無くなりました。 また、他の方やyujiさんからのご意見をお待ちして、締め切りたいと思います。
お礼
分かりやすい説明ありがとうございました。今後もお願いします。