我在try块中有一堆类似的语句,即使有些失败,我也希望它们全部执行。看起来像这样:
try {
doThing1();
doThing2();
doThing3();
doThing4();
} catch (Exception e) {
System.out.println(e.getMessage());
}
例如,如果doThings2()
失败,则3和4将不会执行。我怎样才能让他们全部执行?我不想将它们每个都放在自己的try / catch块中。
答案 0 :(得分:4)
您可以编写一个函数来执行一组调用,即使抛出异常也不会停止:
public void doThing(Runnable... invocations){
for (Runnable invocation : invocations){
try{
invocation.run()
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
如果方法位于同一类中,请以这种方式使用它:
doThing( this::doThing1, this::doThing2, this::doThing3, this::doThing4);
否则,以正确的类/实例为语句加上前缀:
doThing( () -> foo.doThing1(), () -> foo.doThing2(), () -> foo.doThing3(), () -> foo.doThing4());
答案 1 :(得分:0)
由于每种方法都可以引发异常,而其他方法都可以引发异常,因此我们可以假定它们不会导致副作用。在这种情况下,我们可以触发而忘记它们而无需考虑副作用。
ExecutionService service = Executors.newFixedThreadPool();
service.submit(()->doThing1())
service.submit(()->doThing2())
service.submit(()->doThing3())
service.submit(()->doThing4())