我们都知道
SQLException
是受检查的 Exception
并且我们大多数人都同意受检查的异常很冗长并且会导致 throw/catch 污染。
我应该选择哪种方法来避免抛出 SQLException?
推荐哪种包装器/技术/库? (例如
DataAccessException
对于 Spring 人员,但我不想使用 Spring)
只需将其包装为
new RuntimeException(jdbce)
即可。或者定义您自己的异常来扩展运行时异常并使用它。我认为这里不需要任何框架。即使 Spring 在每次需要时也会将已检查的异常包装为未检查的异常。
如果你想将已检查的异常视为未检查的异常,你可以这样做
Java 7 之前您都可以做
} catch(SQLException e) {
Thread.currentThread().stop(e);
}
但是在 Java 8 中你可以这样做
/**
* Cast a CheckedException as an unchecked one.
*
* @param throwable to cast
* @param <T> the type of the Throwable
* @return this method will never return a Throwable instance, it will just throw it.
* @throws T the throwable as an unchecked throwable
*/
@SuppressWarnings("unchecked")
public static <T extends Throwable> RuntimeException rethrow(Throwable throwable) throws T {
throw (T) throwable; // rely on vacuous cast
}
并致电
} catch(SQLException e) {
throw rethrow(e);
}
检查异常是编译器功能,在运行时不会被区别对待。