1

看下面的代码:

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 包围每一行?

4

3 回答 3

1

哟可以试试下面的代码。如果合适

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 
             **/
        }
    }

}
于 2016-04-30T11:32:43.047 回答
0

如果您真的想做这样的事情,您可以将属性设置委托给一个方法,该方法将捕获将 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
     }
于 2016-04-30T11:29:28.730 回答
0

如果您需要列表中的所有异常,则必须通过 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);
      }
}
于 2016-04-30T11:15:48.497 回答