public class ExceptionUtils {
private ExceptionUtils(){}
/**
* 这个方法是从org.apache.commons:commons-lang3:3.9拷贝过来的
* 该技术主要用于包装受检异常为非受检异常,从而可以去除throws声明,也避免了caused by的泛滥
* @param throwable 被包装的异常
* @param <R> 泛型R
* @return 编译用,满足语法要求,无实际意义
*/
public static <R> R rethrow(final Throwable throwable) {
return ExceptionUtils.typeErasure(throwable);
}
@SuppressWarnings("unchecked")
private static <R, T extends Throwable> R typeErasure(final Throwable throwable) throws T {
throw (T) throwable;
}
}
需要抛异常的时候直接调用即可:
@PostConstruct
public void init(){
try {
//只是为了调用TtlMDCAdapter static代码,从而替换org.slf4j.MDC.mdcAdapter的实现
Class.forName("org.slf4j.TtlMDCAdapter");
} catch (Exception e){
ExceptionUtils.rethrow(e);
}
}