即使methodA1()存在异常,我也需要执行methodA2。这里我只添加了两个方法,如methodA1()和methodA2()。让我们说有很多方法。在这种情况下,解决方案也应该适用。
class A {
String methodA1() throws ExceptionE {
// do something
}
String methodA2() throws ExceptionE {
// do something
}
}
class C extends A {
String methodC() throws ExceptionE2 {
try {
methodA1();
methodA2();
} catch (ExceptionE e) {
throw new ExceptionE2();
}
}
}
请注意,methodA1,methodA2可以调用许多方法。在那种情况下有多次尝试,catch,最后会看起来很难看。那么有没有其他方法可以做到这一点?
我需要将错误信息存储在日志文件中。在methodA1()中,方法A2()...每个标记中的信息都得到验证。我想要的是在日志文件中包含所有错误信息。一旦异常抛出,它将生成日志文件。所以我会错过其他标签的验证信息。所以我们不能最终接近。
答案 0 :(得分:0)
别无他法。如果每个方法都可以抛出异常,但是你想继续执行剩余的方法,那么每个方法调用必须在它自己的try-catch
块中。
示例:
List<Exception> exceptions = new ArrayList<>();
try {
methodA1();
} catch (Exception e) {
exceptions.add(e);
}
try {
methodA2();
} catch (Exception e) {
exceptions.add(e);
}
try {
methodA3();
} catch (Exception e) {
exceptions.add(e);
}
if (! exceptions.isEmpty()) {
if (exceptions.size() == 1)
throw exceptions.get(0);
throw new CompoundException(exceptions);
}
您当然必须自己实施CompoundException
。
答案 1 :(得分:0)
您可以在Java 8 lambdas中使用循环:
interface RunnableE {
void run() throws Exception;
}
class Example {
public static void main(String[] args) {
List<RunnableE> methods = Arrays.asList(
() -> methodA1(),
() -> methodA2(),
() -> methodA3()
);
for (RunnableE method : methods) {
try {
method.run();
} catch (Exception e) {
// log the exception
}
}
}
private static void methodA1() throws Exception {
System.out.println("A1");
}
private static void methodA2() throws Exception {
System.out.println("A2");
}
private static void methodA3() throws Exception {
System.out.println("A3");
}
}
请注意,仅当方法抛出检查异常时才需要该接口。如果他们只抛出运行时异常,则可以使用java.lang.Runnable
代替。