首页 > 解决方案 > 必须捕获或声明要抛出未报告的异常:

问题描述

我有这段代码,虽然有 LombokSneakyThrows注释,但编译器仍然抱怨Error:(65, 58) java: unreported exception java.rmi.RemoteException; must be caught or declared to be thrown:

@SneakyThrows
@Override
public Optional<Boolean> unregister() throws RemoteException {
    if(registry != null) {
      Arrays.asList(registry.list()).forEach(className -> {
        registry.unbind(className);
      });
    }
    return Optional.of(true);
}

上面调用这个方法的方法是这样的:

@SneakyThrows
public void stopDatabase() {
    if(registrar == null) {
      LOG.error("Database has not started");
    } else {
      registrar.unregister();
    }
}

将代码更新为此(解决了问题) ,但我们不想更改为像这样使用 for-loop:

@SneakyThrows
@Override
public Optional<Boolean> unregister() {
       if (registry != null) {
           String[] classNames = registry.list();
           for(int i=0;i<classNames.length;i++) {
              registry.unbind(classNames[i]);
           }
      }
      return Optional.of(true);
}

标签: javalombok

解决方案


编译器抱怨是因为你告诉它unregister()抛出一个检查异常。从方法声明中删除 ,throws RemoteException以便 Lombok 可以对编译器隐藏检查的异常。

用法示例:https ://projectlombok.org/features/SneakyThrows


推荐阅读