我应该如何将 SQLException 包装为未经检查的异常?

问题描述 投票:0回答:2

我们都知道

SQLException
是受检查的
Exception
并且我们大多数人都同意受检查的异常很冗长并且会导致 throw/catch 污染。

我应该选择哪种方法来避免抛出 SQLException?

推荐哪种包装器/技术/库? (例如

DataAccessException
对于 Spring 人员,但我不想使用 Spring)

java exception sqlexception
2个回答
5
投票

只需将其包装为

new RuntimeException(jdbce)
即可。或者定义您自己的异常来扩展运行时异常并使用它。我认为这里不需要任何框架。即使 Spring 在每次需要时也会将已检查的异常包装为未检查的异常。


3
投票

如果你想将已检查的异常视为未检查的异常,你可以这样做

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);
}

检查异常是编译器功能,在运行时不会被区别对待。

© www.soinside.com 2019 - 2024. All rights reserved.