- - PR -
NumberFormatException が非チェック例外なのはなぜ?
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-21 18:03
それなら理屈に合いますね。 | ||||||||||||
|
投稿日時: 2003-11-21 21:02
>チェックされる例外を投げられても、呼び出し側が何も対処出来るようなことがない
>ような例外なのにチェックされる例外を投げてる場面が多いんじゃないか? ひょっとしてJSPの話ですか? もしそうならば,それはJSPの弱点(或いは欠陥)であって,例外の側の問題じゃないと思います. >それなのにtry-catchまたはthrowsを書くことをコンパイラによって強制されて >やんなっちゃうよっていうようなニュアンスなんだと思います。呼び出し側で対処出来なくて 一々全部書くのが面倒ってだけなら, catch( java.lang.Exception e ){ } とか書けば良いだけでは? #ダメでしたっけ?java.lang.Throwableさえ書けたとは思うのだが... 普通はやりませんけどね. 書き忘れが検出できるというのは重要ですから. | ||||||||||||
|
投稿日時: 2003-11-27 14:29
引用----------------
>チェックされる例外を投げられても、呼び出し側が何も対処出来るようなことがない >ような例外なのにチェックされる例外を投げてる場面が多いんじゃないか? ひょっとしてJSPの話ですか? もしそうならば,それはJSPの弱点(或いは欠陥)であって,例外の側の問題じゃないと思います. JSPの話ではないです。たとえば、システム的な例外が起きたとして、仮にNamingExceptionが 起きたとします。NamingExceptionをユーザが作った例外SystemExceptionという例外にラップして 投げなおしたとします。もし、このSystemExceptionをチェックされる例外にしたとしたら、 この例外がとんできたクラスはtry-catchまたはthrowsを書かなければなりません。 システム的な例外を回復することなんて出来ないのでtry-catchするとしたらさらに新しい例外で ラップして投げるくらいしかできないし、またはthrowsを書くにしても、ずっと呼び出し元へ むかってthrowsを書き続けなければなりません。それって無意味じゃないですか? なので、ここでいうSystemException(呼び出し側が何も対処出来ない例外)は RuntimeExceptionにすべきだってことです。 呼び出し側が何も対処出来ないってのはそういう意味ざんす。 引用---------------- >それなのにtry-catchまたはthrowsを書くことをコンパイラによって強制されて >やんなっちゃうよっていうようなニュアンスなんだと思います。呼び出し側で対処出来なくて 一々全部書くのが面倒ってだけなら, catch( java.lang.Exception e ){ } とか書けば良いだけでは? #ダメでしたっけ?java.lang.Throwableさえ書けたとは思うのだが... 普通はやりませんけどね. 書き忘れが検出できるというのは重要ですから. 一々全部書くのが面倒なんじゃなくて、無意味だってことです。catch( java.lang.Exception e ){} と書いて全ての例外を補足してもすることがなくて、さらに呼び出し元に向かってラップした例外を 投げるだけでしょう。ただ、上に向かって投げてくしかないような類の例外はRuntimeExceptionに すべきだと思います。 [ メッセージ編集済み 編集者: やまろう 編集日時 2003-11-27 14:33 ] | ||||||||||||
|
投稿日時: 2003-11-27 21:49
賛成賛成。 僕はチェック例外って作ったことがありません。 今までどれだけ無意味な catch 句を見てきたことか。 こんなやつ。
あと、retryの仕掛けがない try{}catch{}は価値が半減すると思うんですよ。 こんな風に書きたいです。(イメージです。深く考えてません。)
| ||||||||||||
|
投稿日時: 2003-11-27 22:35
わたしも賛成。 上に書いたEffective Javaの内容も同様のこと。 # 引用箇所が少なすぎて、あまり伝わってなさそうですが... 強いて言うと、むしろErrorを投げたほうがいいかもしれない。 アサーション的なものならjava.lang.AssertionError、 それ以外はただのjava.lang.Errorにcouseをつけて。 この方が、どっかでもみ消されることが少なくなると思います。 で、当初のNumberFormatExceptionは大抵の場合、ユーザー入力のパーズ時に発生します。 その場合、再入力を促すことにより回復可能です。 なので、NumberFormatExceptionはチェック例外でも構わないと思います。 | ||||||||||||
|
投稿日時: 2003-11-28 00:01
前にどこかで聞いたのですが、Errorはユーザアプリケーションからは投げてはいけないのではないでしょうか?(根拠はありません。自分がやっていて、他の人に注意されたことがあったからです) | ||||||||||||
|
投稿日時: 2003-11-28 07:07
>むかってthrowsを書き続けなければなりません。それって無意味じゃないですか?
>なので、ここでいうSystemException(呼び出し側が何も対処出来ない例外)は >RuntimeExceptionにすべきだってことです。 >呼び出し側が何も対処出来ないってのはそういう意味ざんす。 つまり,そのアプリケーション固有のセマンティクスにおいて処理する/キャッチする 必要のない場合に,そのアプリケーション固有の例外をどうするか,という話ですよね? #JSPの話でもなければJ2EEの話でもなく,あくまでJavaアプリケーションの実装 #レベルの話. 例外をどう使うかが設計の一部だというのは,当たり前の話じゃなかったんですか? | ||||||||||||
|
投稿日時: 2003-11-28 07:11
>前にどこかで聞いたのですが、Errorはユーザアプリケーションからは投げてはいけないの
>ではないでしょうか? #多分,Errorのサブクラスという意味だとして, >(根拠はありません。自分がやっていて、他の人に注意されたことがあったからです) おそらく,禁止はされていないと思いますよ. 適切なErrorのサブクラスを定義して投げる分には問題はないと思います.むしろ 問題があるとすれば不適切なクラスを作ったり,ErrorでないものをErrorで投げたり する場合でしょう.もちろん,なんでもかんでもErrorで投げるとすれば,それは 好ましいプログラミングスタイルとは言えないでしょうが. | ||||||||||||
