引发 RuntimeException 的方法是否应该在方法签名中指示它?

2022-08-31 10:28:31

例如,框架/JDK 中的许多方法可能会抛出

java.lang.SecurityException 

但这在方法签名中没有指示(因为这是通常为检查的异常保留的做法)。我想说的是,在方法 sigs 中声明 RuntimeExceptions 有很多好处(例如,类似于静态类型检查)。我是喝醉了还是别的?


答案 1

我不会在签名中声明未经检查的异常,因为它会误导该API的用户。是否必须显式处理异常已不再明显。

在javadoc中声明它是一种更好的方法,因为它允许某人在认为有必要时处理它,但知道他们可以根据需要忽略它。这使得选中和未选中之间的分离变得清晰。


答案 2

来自 Oracle Java 教程

“如果记录一个方法的API(包括它可能引发的异常)非常好,为什么不也指定运行时异常呢?”运行时异常表示由编程问题导致的问题,因此,无法合理地期望 API 客户端代码从中恢复或以任何方式处理它们。这些问题包括算术异常,例如除以零;指针异常,例如尝试通过空引用访问对象;和索引异常,例如尝试通过太大或太小的索引访问数组元素。

运行时异常可能发生在程序中的任何位置,而在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。