【Java】Exceptionクラスの中でメッセージを分けたいです。。。例外分岐処理を実装してみた

異なるタイプのオブジェクトに対するログメッセージを変更したいな~、でもExceptionクラスを複数作りたくないという方は多いはず

以下は、Javaでの例外を使用した一般的な実装です!!

継承したカスタム例外クラスInvalidTargetObjectTypeExceptionを作成します

public class InvalidTargetObjectTypeException extends RuntimeException {
    private final String objectType;

    public InvalidTargetObjectTypeException(String objectType, String message) {
        super(message);
        this.objectType = objectType;
    }

    public String getObjectType() {
        return objectType;
    }
}

objectTypeにパラメータを詰めることで、メッセージの分岐をすることができます

例外がスローされるコードを書きます
例えば、メソッド内で特定の条件が満たされない場合に例外をスローするとします

public class YourClass {
    public void someMethod(Object target) {
        // ある条件が満たされない場合
        if (!isValid(target)) {
            throw new InvalidTargetObjectTypeException("CustomObjectType", "Invalid target object type");
        }

        // メソッドの残りの実装
    }

    private boolean isValid(Object target) {
        // ターゲットオブジェクトが有効な条件
        // この例では簡略化のため、常にtrueを返すものと仮定しています。
        return true;
    }
}

例外が捕捉される場所でログメッセージを生成します

try {
    // someMethodを呼び出すなどの処理
} catch (InvalidTargetObjectTypeException ex) {
    String objectType = ex.getObjectType();
    String errorMessage = ex.getMessage();

    // ログメッセージを生成し、ログに出力する
    String logMessage = "Invalid target object type: " + objectType + ". Error message: " + errorMessage;
    log.error(logMessage, ex);
}

このようにすることで、InvalidTargetObjectTypeExceptionがスローされた際に、その例外に関する情報を使って適切なログメッセージを生成できます

例外の構造とログ出力の詳細はプロジェクトの要件によって実装が異なるため、合わせて利用してみてください!

ではっ


是非フォローしてください

最新の情報をお伝えします