Захватите несколько исключений и выкиньте новый список исключений

55
6

Посмотрите на следующий код:

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


Все настройки могут вызывать ProductException с помощью специального сообщения. Но я хочу поймать все исключения. Если есть исключения, я хочу отправить список в GUI всех ошибок.

Как я могу это сделать, или мне нужно окружить каждую строку Try Catch?

спросил(а) 2016-04-30T14:00:00+03:00 4 года, 2 месяца назад
1
Решение
56

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

}

ответил(а) 2016-04-30T14:32:00+03:00 4 года, 2 месяца назад
39

Если вы действительно хотите это сделать, вы можете делегировать параметр свойства методу, который поймал бы запуск setter как лямбда, а затем уловить возможное исключение или добавить его в список:


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-30T14:29:00+03:00 4 года, 2 месяца назад
40

если вам нужны все исключения в списке, вы должны окружить каждую строку, попробовав уловить и добавьте исключение в список, а при последней проверке размер списка больше 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-30T14:15:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема