私は、基本的に 1 つの単純なことを実行し、エラー メッセージをログに記録し、同じエラー メッセージを使用して実行時例外をスローするメソッドを作成しています。RuntimeException の子例外をスローできるようにしたい。私が持っている方法は次のとおりです。
public static <T extends RuntimeException> void logErrorAndThrowException(Logger logger, String errorMessage, Class<T> exceptionClazz) throws T {
logger.error(errorMessage);
RuntimeException runtimeException = new RuntimeException(errorMessage);
throw exceptionClazz.cast(runtimeException); // Not work!!
}
この例外を定義しました:
public final class MyException extends RuntimeException {
public MyException() {
}
public MyException(String message) {
super(message);
}
public MyException(Throwable cause) {
super(cause);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
}
次に、次を使用してメソッドを呼び出します。
logErrorAndThrowException(logger, "This is an error message", MyException.class);
上記のコメント行はキャスト例外で失敗します。次に、次の別の実装を試しました。
public static <T extends RuntimeException> void logWarningAndThrowException(Logger logger, String errorMessage, Class<T> exceptionClazz) throws T {
logger.error(errorMessage);
try {
throw exceptionClazz.newInstance();
} catch (InstantiationException e) {
// handle
} catch (IllegalAccessException e) {
// handle
}
}
この実装では、例外の引数なしのコンストラクタしか呼び出せないため、エラー メッセージを設定できません。
誰でもこれを手伝ってもらえますか?