短格式:当被重写的方法不抛出异常时,如何抛出异常(或者进行良好、干净的异常处理;或者至少是肮脏地强制执行停止)?
上下文:我们拥有一种可以使用“宏”实现自动化的专有软件的许可证。用户定义的宏必须具有以下形式:
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
),这感觉有点草率,而且“违背”了基类方法contracy。
不,我不能更改overriden execute
方法的源代码。
发布于 2011-10-06 06:31:02
看起来,这样做的目的是每个SoftwareMacro
都执行自己的错误处理。如果需要的话,在整个try
方法周围使用一个大的execute()
,但是不要让任何异常离开。在execute方法中执行您需要做的任何清理工作,如果用户提供了这样做的方法,则可能会为用户打印错误消息。
您应该检查它们提供的所有APIs -也许您应该使用一个错误报告工具。
发布于 2011-10-06 06:33:16
这取决于“宏播放器”在遇到运行时异常时所做的事情,以及您想要发生的事情。
如果它根本不处理它,但您并不关心,那么抛出一个RuntimeException。
如果处理得当,则抛出一个RuntimeException。
如果它没有正确地处理它们,并且您不希望它不幸地失败,那么捕获在您的执行方法中可能发生的异常,并按您认为最好的方式处理它们:显示一个错误对话框,输出一个错误消息,在日志中记录一些错误.
发布于 2011-10-06 06:34:10
“应该”意味着有一个正确的答案,这是我没有做的,不符合你的需要。
如果系统能够容忍运行时异常,并且满足您的需要,那么为什么不呢?
不是说你有选择,因为你不能抛出一个检查异常。
(检查异常对我来说似乎是一个失败的实验,尽管我理解动机。)
https://stackoverflow.com/questions/7675776
复制