我用try/catch编写了很多代码,几乎在所有情况下我都会采取相同的操作。我想要做的是通过创建一些东西来简化我的错误处理,我可以这样说
ManagedExceptionEnvironment() {
// The code that might throw exceptions
}然后在ManagedExceptionEnvironment内部,它拥有共享的错误处理逻辑。
我最初的想法是让ManagedExceptionEnvironment的构造函数接受一个Runnable,但是如果你把可能抛出异常的逻辑放在匿名Runnable的run方法中,那么它仍然会抱怨没有实现try/catch,即使你传递给它的容器可以处理它。
我认为另一种选择是只在最高级别处理错误,并让它们不断被抛出另一个级别,尽管这似乎相当有风险。
编辑:我猜这里的一个选项(我不知道这是不是Java中的东西)是某种宏?
编辑2:我粗略地读了一下关于使用C预处理器将宏注入Java src的内容,这真的很可怕。所以宏作为一种解决方案出现了。
发布于 2018-08-19 01:07:19
将其封装在如下的接口中如何:
class ManagedExceptionEnvironment {
public static void safeExecution(Wrapper w) {
try {
w.codeThatThrows();
} catch (Exception e) {
// your error handling
}
}
public static void example() {
safeExecution(() -> { throw new Exception(); });
// Or the old-fashioned way:
safeExecution(new Wrapper() {
@Override
public void codeThatThrows() throws Exception {
throw new Exception();
}
});
}
interface Wrapper {
public void codeThatThrows() throws Exception;
}
}诀窍是类似于Runnable.run()的方法指定它可能抛出异常,而run()不抛出异常。
https://stackoverflow.com/questions/51910838
复制相似问题