Short form: How do you throw exceptions (or do nice, clean exception handling; or at least dirtily force execution to stop) when the overridden method doesn’t throw exceptions?
Context: We have a license for a piece of proprietary software that can be automated using Java “macros”. A user-defined macro must be of this form:
public class MyMacro extends SoftwareMacro {
public void execute() {
// user code goes here
}
}
i.e. a class that extents SoftwareMacro and that has a method called execute that overrides the base class’ execute. The contents of this overriding execute are what gets… well… executed when the macro is “played”.
But the overridden execute method apparently does not throw any exceptions.
execute() in com.mycompany.mypackage.MyMacro cannot implement execute() in
somesoftware.base.SoftwareMacro
overridden method does not throw java.lang.Exception
Maybe this is naïve, but while developing I usually like to have the appropriate exception type bubble up to the top and force execution to stop, so that I can see them and go on to debug. This is apparently not an option here.
Should I resort to throwing RuntimeException instead? (since RuntimeException does not need to be specified) That feels a bit sloppy, and a “violation in spirit” of the base class method contracy.
P.S. No, I can’t change the source code of the overriden execute method.
Looks like the intent is that each
SoftwareMacrodo all its own error handling. Use a bigtryaround your wholeexecute()method if need be, but don’t let any exceptions escape. Do whatever cleanup you need to do inside your execute method, and possibly print an error message for the user, if they provide a way to do that.You should examine all the APIs they provide — perhaps there’s an error reporting facility you’re supposed to use.