アプリ版:「スタンプのみでお礼する」機能のリリースについて

JAVAの例外の取り扱いについて

お世話になります。JAVAでWebアプリケーションを開発しているものです。エラーハンドリングについて、悩んでいます。

私は、我流でプログラムの開発を行ってきたため、エラーハンドリングについて、あまり知識がありません。

今回とあるプロジェクトのリーダーを任されることになり開発を進めていたのですが、気がついたらメンバーのプログラムにtry,catch,throwsなどのエラーハンドリングがコーディングされていない状態で困っています。(みんな外国人で私が今まで一から教えていました。)

そこで、皆様はどのようにJAVAで例外を扱っているのかをお伺いしたいと思い投稿いたしました。

私の少ない認識では、
(1)最上位のクラス、画面に一番近いクラスでtry,catchを行う
(2)Exceptionはすべてのクラスの例外をcatchするが、一つ一つのエラーを明確に定義する方がよい(何のエラーが発生したのかわからない為)
⇒ただし、ここが一番の悩みどころです。エラーを設定する考え方として、配列を扱っている場合は、ArrayIndexとか、ファイルを扱っている場合はI/OExceptionとかソースコードを見て判断すべきでしょうか?
(3)独自エラークラスを作る場合は、Exception,RunnableExceptionを敬称する。
⇒そもそも何故、独自Exceptionクラスを作る必要があるのでしょうか?画面によってメッセージ、処理、遷移先を変えたいから?

上記が私の持っている知識と、疑問点です。

正直自分自身がよくわかっていないため、他の外国人メンバーに説明できません。とりあえず、Exceptionをthrowするように言っているのですが、このままじゃまずいと思い投稿しました。

どなたか忌憚のないご意見をお聞かせください。

A 回答 (3件)

プロジェクトのコンセプト、テーマ、目的を明確にしていくと、


例外処理の使用に対する方向性もまとまってくると思いますよ。

例えば、共通ライブラリ作成の時など、
再利用性よりも、使いやすさや開発効率を優先するなら、
例外は、極力throwせずに、Javaの標準ライブラリの例外も、可能な所は、
ラッピングクラスにて、具体的に処理してしまうでしょう。

例えば、使いやすさよりも、再利用性を優先する共通ライブラリなら、
クラス設計は抽象的にしておいて、色々な場面で利用できるようにするでしょう。
その場合、独自にExceptionを作成し、throwする事により、具体的な処理は、
クラスの呼び出し元に委譲することになるでしょう。

オブジェクト指向の考えを用いるなら、クラス部品を再利用率毎に分類し、
例外を処理する役割を、分担すると思います。

こんなところで、回答になっているだろうか・・・
    • good
    • 0

Java経験3年目の若輩者ですが、私の意見では



(1)最上位のクラス、画面に一番近いクラスでtry,catchを行う

>>try,catchは、素直に発生源にに記述すべきかと思います。様々な箇所のExceptionをまとめてcatchする場所を作ると、具体的にどこで落ちたのか、何が原因なのかが分からなくなります。

(2)Exceptionはすべてのクラスの例外をcatchするが、一つ一つのエラーを明確に定義する方がよい(何のエラーが発生したのかわからない為)
⇒ただし、ここが一番の悩みどころです。エラーを設定する考え方として、配列を扱っている場合は、ArrayIndexとか、ファイルを扱っている場合はI/OExceptionとかソースコードを見て判断すべきでしょうか?

>>私はあまり気にしていません。Eclipseに任せてます。(1)で述べたように、発生源でcatchしておけば、何のエラーかは大体分かります。
ただし、tiyojisaka様の現場で、独自のフレームワーク(あるいは携わっている業務に特化したフレームワーク)を用いてるのであれば話は別です。
そのフレームワークは何を可能としているのか、何を目的としているのかを明確にした上で、目的外のものは独自のExceptionによってthrowすべきかと思います。(そして独自のExceptionはcatchされるべきではありません)

(3)独自エラークラスを作る場合は、Exception,RunnableExceptionを敬称する。
⇒そもそも何故、独自Exceptionクラスを作る必要があるのでしょうか?画面によってメッセージ、処理、遷移先を変えたいから?

>>そもそもExceptionとは「例外」です。そのシステムでは許容されない現象を表現するべきです。メッセージ・遷移先くらいであれば、例外を使い分けるのはまぁアリかと思いますが、処理を例外で判断するのはあまり好ましくないのではないでしょうか?だって「例外」だし(笑)
例外によって処理を分ける時点で、それは「例内」であり、Exceptionをthrowするのではなく、その手前でif文なりで分けるべきかと思います。

以上、長々と申し訳ありません。若輩者がピヨピヨ吠えただけですが、何か違う点があれば、逆に指摘していただけると助かります^^;
    • good
    • 0

忌憚のない意見をお聞かせ下さいということなので、言わせて頂きます。



まず、なぜあなたのような素人に毛が生えたような人がプロジェクトのリーダをしてるのか理解できません。おもちゃのシステムですか?
お金をもらって仕事をしている『プロ』ですよね?
知識のないあなたが、プロジェクトをするべきではありません。
そういう人がシステムを作るから、SEのイメージが良くならないんです。
まじめにやっている者からしたら、本当に腹が立ちます。

Javaの例外は奥が深いです。一長一短で身に付くものではありませんし、ひとことで説明できるものでもありません。
システム全体を通して臨機応変に対処するものです。
最上位で処理すれば良いという、安価な考えでは完全なシステムは作れません。
オブジェクト指向を考えると、個々のクラスの免責を定義できるはずです。
それに従って、そのクラスの免責の範囲ないで例外処理をすべきです。
また、独自例外を作成する理由も、既存の例外では対処しきれない場合があるからです。
Exceptionクラスはただの抽象的な例外クラスです。
Exceptionクラスで処理すべきでないというのは、上記の理由からも明白でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!