別の記事で掲載したAppMainから呼び出す、共通インターフェースの定義について記述する。
バッチプログラム実行時には、「String[] args」という文字列の配列を可変引数として渡すことができる。
そこから呼び出される機能も、取りうる引数は全て 「String[] args」になる。そのため、共通インターフェースであるCommandInterface.javaも同じ引数とした。
ただしメソッド名の横に「throws」を書かなくても投げられる致命的エラー(いわゆるRuntimeException)以外の例外は、アプリケーションで捕捉して処理したい。
呼び出す個々の機能で、例えばIOExceptionが起きた時、throws Exceptionで何でも全部例外を受け取る側の処理に任せてしまっては、メンテナンスに著しい支障をきたす。
そこで共通インターフェースはAppExceptionという拡張例外をスローする仕様とし、原則として個々のクラス内部で起きるエラーは個々のクラスが処理し、上位にスローすべき例外は拡張例外のみとする。
<以下、CommandInterface.javaのソースコード>
package cmd;
import exception.AppException;
/**
* コマンドインターフェース
*/
public interface CommandInterface {
/**
* コマンドラインインターフェースです。 <br>
* 本クラスの機能をバッチから呼び出す場合は、このメソッドを実行する。
*
* @param args
* コマンドライン引数
* @throws Exception
*/
public void doMain(String[] args) throws AppException;
}
<以下、アプリケーション例外クラス>
package exception;
/**
* アプリケーション例外
*/
public class AppException extends Exception {
/** シリアルバージョン */
private static final long serialVersionUID = 1L;
/**
* エラーメッセージを渡すタイプのコンストラクタです。
*
* @param message
* エラーメッセージ
*/
public AppException(String message) {
// スーパークラスの処理を実行する
super(message);
}
/**
* 例外クラスを渡すタイプのコンストラクタです。
*
* @param cause
* 原因
*/
public AppException(Throwable cause) {
// スーパークラスの処理を実行する
super(cause);
}
}
0 件のコメント:
コメントを投稿