我有一个包含缓存(Set)的类,缓存是在实例化的基础上构建的。我很困惑,如果构建缓存失败(无法连接到数据库或某些数据库),我应该抛出哪个异常/错误。
class Provider {
public Provider() {
buildCache();
}
private void buildCache() {
try {
this.cache = getDataFromDb();
} catch (Exception ex) {
throw new ???
}
}
}
我想到的一个例外是ExceptionInInitializerError
,但是javadoc说它是在初始化静态成员时抛出的。
我应该抛出IllegalStateException
因为缓存没有构建,所以这个类没用吗?
显然,我可以创建自己的ErrorOnBuildingCache
并抛出它,但我想知道Java库中的任何异常是否适合这种情况。
答案 0 :(得分:9)
如果您怀疑应该抛出哪个异常,那么代码的用户也是如此。因此,定义您自己的异常类型(例如FailedToInitializeCacheException
)并抛出它。这样没有歧义。
IllegalStateException
将是一个合理的后备位置,但你永远不应该使用ExceptionInInitializerError
(或以Error
结尾的任何东西) - 这是低级的类加载器,不要乱那个。
答案 1 :(得分:1)
显然我可以创造自己的 ErrorOnBuildingCache然后抛出它 我想知道Java中是否有任何异常 图书馆适合这种情况。
这正是你应该做的。不要尝试使用现有的异常,而是自己创建一个异常。所以你知道什么时候它与你的缓存有关,而不是静态字段实例化错误或其他什么。
另外,在特定情况下,您不应该捕获例外情况。捕获异常将捕获所有内容,如空指针异常,除以零,IO错误,安全异常。
我要做的是: