Java 中是否有任何标准注释来指示 nothrow 语义?

2024-01-02

我想将 Java 中的接口方法记录为不允许传播异常,并进行某种静态分析来验证该方法的实现是否捕获并处理可能已传播到它的任何异常。类似的东西@NoThrow.

例如,我希望能够写:

interface SomeServiceProviderInterface {
   @NoThrow
   @NonNull
   SomeResult someComputation();
}

...并保证实现遵守此接口契约。是否有注释和静态分析工具已经可以做到这一点?如果没有,是否有人知道这是否可以通过注释处理器来实现(它可以查看代码是否包含 try...catch 块?)和/或对如何实现这样的事情有任何指示或建议吗?谢谢!


不能有这样的注解,因为不可能保证一个方法不抛出异常。这是因为任何方法都可能抛出VirtualMachineError随时 https://stackoverflow.com/questions/8728866/no-throw-virtualmachineerror-guarantees。特别是,一个方法可能会抛出一个OutOfMemoryError even if它本身不直接或间接分配内存(使用new操作员)。这不仅仅是理论上的问题:如果垃圾收集线程花费太长时间,一些并发垃圾收集器将执行此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中是否有任何标准注释来指示 nothrow 语义? 的相关文章

随机推荐