捕获多个异常并抛出一个新的异常列表



查看以下代码:

public void editProduct(String articleNumber, ...) {
 product.setArticleNumber(articleNumber);
 product.setDescription(description);
 product.setLendable(lendable);
 product.setName(name);
 product.setPrice(price);
 product.setPlace(place);
}


所有的setter都可以抛出带有自定义消息的ProductException。但我想抓住所有的例外。如果有异常,我想向GUI发送一个所有错误的列表

我该怎么做,还是需要用Try-Catch包围每一行?

Yo可以尝试以下代码。如果是合适的

public void editProduct(String articleNumber, ...) {
    int count=1;
    Vector<String> v=new Vector<String>();
    while(count<=6)
    {
        try{
            switch(count)
            {
                case 1:product.setArticleNumber(articleNumber);break;//assume it will throw ArticalException
                case 2:product.setDescription(description);break;   //DescriptionException
                case 3:product.setLendable(lendable);break;         //LendableException
                case 4:product.setName(name);break;                 //NameException
                case 5:product.setPrice(price);break;               //PriceException
                case 6:product.setPlace(place);break;               //PlaceException
            }
            count++;
        }catch(Exception e)
        {
            v.add(e.getMessage);
            count++;
            /*
             *suppose there is some exception like ArticalException,PriceException
             *then it will store in vector and your program running continue
             *and at last you have the list of all exceptions that are occured in program
             *now you will take desired action what you want to do 
             **/
        }
    }
}

如果您需要列表中的所有异常,那么您必须通过try-catch将每一行括起来,并将异常添加到列表中,在最后一次检查中,列表的大小大于0,然后将该列表作为异常返回。

List<CustomException> exceptionList = new ArrayList<CustomException>();
public void editProduct(String articleNumber, ...) 
{
     try{
          product.setArticleNumber(articleNumber);
     }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
      try{
      product.setDescription(description);
      }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
     try{
     product.setLendable(lendable);
     }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
     try{
          product.setName(name);
     }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
      try{
       product.setPrice(price);
     }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
     try{
      product.setPlace(place);
     }catch(CustomException exception)
     {
       exceptionList.add(exception);
      }
}

如果您真的想做这样的事情,您可以将属性设置委托给一个方法,该方法将捕获并运行setter作为lambda,然后捕获可能的异常,或将其添加到列表中:

class C {
    @FunctionalInterface
    private static interface TaskMayThrow {
        void run() throws CustomException;
    }
    private static boolean runTask(TaskMayThrow task, List<CustomException> errList) {
        try {
            task.run();
            return true;
        } catch(CustomException e) {
            errList.add(e);
            return false;
        }
    }
    List<CustomException> exceptionList = new ArrayList<CustomException>();
    public void editProduct(String articleNumber, ...) 
    {
         runTask(() -> product.setArticleNumber(articleNumber), exceptionList);
         runTask(() -> product.setDescription(description), exceptionList);
         // The same for all other setters
         // Do whatever you want with the error list
     }

相关内容

最新更新