【发布时间】:2023-03-27 16:15:01
【问题描述】:
简写形式:当被覆盖的方法不抛出异常时,你如何抛出异常(或进行良好、干净的异常处理;或者至少是肮脏地强制停止执行)?
上下文:我们有一个专有软件的许可证,该软件可以使用 Java“宏”实现自动化。用户定义的宏必须是这种形式:
public class MyMacro extends SoftwareMacro {
public void execute() {
// user code goes here
}
}
即扩展SoftwareMacro 的类,并且有一个名为execute 的方法覆盖基类'execute。这个覆盖 execute 的内容是在“播放”宏时得到......好吧......执行。
但是被覆盖的execute 方法显然不会抛出任何异常。
execute() in com.mycompany.mypackage.MyMacro cannot implement execute() in
somesoftware.base.SoftwareMacro
overridden method does not throw java.lang.Exception
也许这很幼稚,但在开发过程中,我通常喜欢让适当的异常类型冒泡到顶部并强制执行停止,这样我就可以看到它们并继续调试。这显然不是这里的选择。
我应该求助于投掷RuntimeException 吗? (因为RuntimeException不需要指定)感觉有点草率,和基类方法矛盾的“精神上的违背”。
附:不,我不能更改被覆盖的 execute 方法的源代码。
【问题讨论】:
-
干净的方法是拥有一个集中的“异常”处理程序,该处理程序将从覆盖方法内部检测“引发”异常并停止应用程序执行。务实的方法是抛出 RuntimeException。
-
@DaveHowes - 是的,你误读了,对不起。 Java 要求覆盖方法的异常规范是被覆盖方法的适当子集;空集当然是真子集。您不需要抛出与超类相同的异常。