我正在编写一个基本上做一件简单事情的方法,记录错误消息并使用相同的错误消息引发运行时异常。我希望它能够抛出 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
}
}
使用此实现,我只能调用我的异常的无参数构造函数,因此无法设置错误消息。
有人能帮忙吗?