• ベストアンサー

メソッドは値を返さないというエラー?

お世話になります。 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です。

質問者が選んだベストアンサー

  • ベストアンサー
noname#16216
noname#16216
回答No.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 を返却してると言うことが、明確になります。

noname#29100
質問者

お礼

分かりやすい説明ありがとうございました。今後もお願いします。

その他の回答 (2)

noname#16216
noname#16216
回答No.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」の 値を返却するようになりますが。

noname#29100
質問者

お礼

回答ありがとうございました。 単にミスプリ?だったのでしょうかね。 通常は、{}を省略するものではないと思うのですが・・。 回答をいただいた  catch (NumberFormatException e) {}  return val; と  catch (NumberFormatException e) {  return val;  }   return val; } とでは意味が違うのでしょうか? ちょっと疑問になりました。

  • yuji
  • ベストアンサー率37% (64/169)
回答No.1

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文の  存在意義がなくなりますが。

noname#29100
質問者

お礼

早々の回答ありがとうございます。 参考書には、 catch (NumberFormatException e)   return val; となっていて、{}がありません。 無い文法があるとか? 例外処理として文字列を整数に変換できなかた場合valのみを返すだけで良いのですが・・・。 ご指摘の通り追加したところエラーは無くなりました。 また、他の方やyujiさんからのご意見をお待ちして、締め切りたいと思います。

関連するQ&A