質問: ### 前提・実現したいこと javaの決まりというか、慣習というか分かりませんが、引数によって何らかの判定を行い、 判定にマッチした場合例外を投げるだけの関数を作ることはjavaのルールや慣習として許されているでしょうか。 **関数の説明** * 呼び出し元からチェック用の変数を引数として受け取る。 * 特定の値であれば例外を投げる。 * 上記の特定の値意外であれば、何もせず呼び出し元に処理が戻る。 ### 該当のソースコード 例えばこんな感じ ``` private void errorCheck(String checkTarget){ if(checkTarget.equals("hogehoge")){ throw new SystemException("システムエラー"); } else if(checkTarget.equals("fugafuga")){ throw new BusinessException("業務エラー"); } } ``` ### 試したこと 戻り値をvoidでなく、booleanとして例外とならなかった場合は常に`true`を返し、 呼び出し元では戻り値を受け取らず、処理を続行する。 ``` private boolean errorCheck(String checkTarget){ if(checkTarget.equals("hogehoge")){ throw new SystemException("システムエラー"); } else if(checkTarget.equals("fugafuga")){ throw new BusinessException("業務エラー"); } return true; } ``` ### 気になる部分 該当のソースコードについて * 呼び出し元から見ると、void型の関数を呼んだにもかかわらす処理が終わってしまう事がある。 * 関数名がcheckとなっているが boolean の戻り値でない。 試してみたことについて * 戻り値を boolean と言いつつ、true OR Exception を返すような作りになっている。(正確には例外は返していないが...) * 呼び出し元では、戻り値がある関数であるにも関わらず、その戻り値を受取る必要がない。(受け取らない。) ご回答の程よろしくお願いします。
回答: 本来はそのcheckTargetを返すメソッドこそが例外を出力すべきだとは思いますが、外部システムと連携している場合など、レスポンスの文字列を判断して処理する流れにせざるを得ない、そして、それを例外に変換し、throwする処理があっても私はよいと思います。checkというメソッド名が気になるなら、validate(検証)はいかがでしょうか。 もしくは、checkTargetを返すメソッドを持ったクラスを更にラップしてしまって、例外判定まで含めた上でcheckTargetの文字列を返すものを作ってみてはどうでしょうか。