我希望记录一下Java中的一个接口方法,该方法不允许传播异常,并且需要某种静态分析来验证实现该方法的类是否捕获并处理了可能传播到该方法的任何异常。可以使用@NoThrow
之类的注释。
例如,我希望能够编写:
interface SomeServiceProviderInterface {
@NoThrow
@NonNull
SomeResult someComputation();
}
...并且需要确保实现遵守此接口契约。是否已经存在一个注释和静态分析工具可以做到这一点?如果没有,是否有人知道是否可以通过注释处理器实现这一点(它能否看到代码中是否包含try...catch块?),或者对如何实现这样的工具有任何指导或建议?谢谢!
throws
子句显然不是解决方案,因为它仍允许RuntimeException
。我建议您看一下C++的noexcept
关键字,这是对异常处理进行了十年研究的结论。虽然Java和C++之间存在语言差异,但其中许多C++的论点也适用于Java。甚至更多,因为Java的异常安全性,try-finally
/try-with-resources
,比RAII要弱得多。 - TheOperator@NonNull
一样。 - Alexander Oh