构建缓存失败时应该抛出哪个异常?

Gen*_*zer 6 java exception

我有一个包含缓存(Set)的类,缓存是在实例化的基础上构建的.我很困惑,如果构建缓存失败(无法连接到数据库或某些),我应该抛出哪个异常/错误.

class Provider {

   public Provider() {
       buildCache();
   }

   private void buildCache() {
       try {
           this.cache = getDataFromDb();
       } catch (Exception ex) {
           throw new ???
       }          
   }
}
Run Code Online (Sandbox Code Playgroud)

我脑子里有一个例外ExceptionInInitializerError,但是javadoc说它是在初始化静态成员时抛出的.

我应该抛出一个IllegalStateException原因,没有构建缓存,所以这个类是没用的?

很明显,我可以创建自己的ErrorOnBuildingCache并抛出它,但我想知道Java库中的任何异常是否适合这种情况.

ska*_*man 9

如果您对应抛出哪个异常存在疑问,那么您的代码用户也会如此.因此,定义您自己的异常类型(例如FailedToInitializeCacheException)并抛出它.这种方式毫不含糊.

IllegalStateException将是一个合理的后备位置,但你永远不应该使用ExceptionInInitializerError(或任何结尾Error) - 这是低级别的类加载器的东西,不要搞乱它.