在try / catch中执行所有语句

时间:2019-06-18 18:16:31

标签: java try-catch

我在try块中有一堆类似的语句,即使有些失败,我也希望它们全部执行。看起来像这样:

try {
   doThing1();
   doThing2();
   doThing3();
   doThing4();
} catch (Exception e) {
   System.out.println(e.getMessage());
}

例如,如果doThings2()失败,则3和4将不会执行。我怎样才能让他们全部执行?我不想将它们每个都放在自己的try / catch块中。

2 个答案:

答案 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())