未捕获的异常必须被捕获或声明为抛出:

时间:2020-10-22 03:49:56

标签: java lombok

我有这段代码,尽管带有Lombok SneakyThrows批注,但编译器仍然抱怨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);
}

1 个答案:

答案 0 :(得分:2)

编译器在抱怨,因为您告诉它unregister()引发了一个已检查的异常。从方法声明中删除throws RemoteException,以便Lombok可以从编译器中隐藏已检查的异常。

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