2012-10-11 2 views
0

Я ищу предложения о том, как обрабатывать исключения в Java в сценарии, гдеJava на заказ Обработка исключений

Class A.test() 
{ 
    ClassB.test1() 
} 


test1() 
{ 
    Map listOfExceptions = new HashMap(); 
    for() 
    { 
     try{ 
     } 
     catch(custException e){ 
     // I want the for loop to continue even if there is an exception 
     //So I am not throughing now rather adding the exception message to map with 
     //the field name for which for loop is running as key and message as value 
     { 
    } 

// at some point if map has >0 records I want to throw an exception to classA. 
} 

Так что вопрос здесь, как я могу добавить данные карты за исключением выброшен? в основном мне нужен список исключений, которые должны быть отправлены вызывающему методу, как часть обработки исключений. Есть ли способ, которым мы можем это сделать? Это может быть очень глупый вопрос, если ответ хорошо известен, но я не нахожу точного ответа в любом месте.

+0

Этот код java? – Prasanth

+0

Этот код Java не будет компилироваться. –

+3

Я думаю (если честно), это псевдокод Java-ish –

ответ

7

Почему бы просто не построить List<Exception>, как вы итерации? Затем по завершении бросьте CustomException (полученный от Exception), если этот список не пуст, и укажите List<Exception> в качестве поля в этом CustomException.

Возможно, вы предпочитаете не хранить List<Exception>, а List<Info>, где Info представляет данные, приводящие к исключению. Это, вероятно, будет более легким.

Лучше все еще, создайте объект ErrorCollator, который вы можете добавить Exceptions по мере их возникновения. Как только вы закончите, вызовите ErrorCollator.throwExceptionIfReqd(), и этот объект сам может определить, нужно ли исключать исключение (просто, если List не пуст). Таким образом, вы можете использовать повторно используемый компонент/шаблон, который вы можете использовать последовательно. Возможно, стоит поработать, если не сразу.

+0

Спасибо Брайан, это помогло. – Swagatika

0

Создание пользовательского класса Exception, как

Class CustomException extends Exception{ 

Map listOfExceptions; 


CustomException (Map m){ 
    ListofExceptions=m; 
} 
} 

Теперь выбрасывайте это исключение клиента, когда запись> 0 или anyother состояние.

throw new CustomException(listOfExceptions); 
0

Заканчивать следующий код, как вы можете добавить исключение в HashMap

public class ClassA { 

    HashMap hm = new HashMap(); //HashMap Object that holds Exceptions 

    public ClassA(){ 
     try { 
      runA(); 
     } catch (Exception ex) { 
      hm.put("a", ex); //put Exception in HashMap 
     } 
     try { 
      runB(); 
     } catch (Exception ex) { 
      hm.put("b", ex); //put Exception in HashMap 
     } 
    } 

    private void runA() throws Exception { 
     throw new Exception("a"); //Generate exception a 
    } 

    private void runB() throws Exception { 
     throw new Exception("b"); //Generate exception b 
    } 
} 

Затем вы можете расширить этот класс, предоставляя некоторую функцию геттер, чтобы получить объект HashMap и используя этот цикл (Iterator), вы можете перебирать его:

// Get a set of the entries 
Set set = hm.entrySet(); 
// Get an iterator 
Iterator i = set.iterator(); 
// Display elements 
while(i.hasNext()) { 
    Map.Entry me = (Map.Entry)i.next(); 
    System.out.print(me.getKey() + ": "); 
    System.out.println(me.getValue()); 
} 
0

Пожалуйста, попробуйте ввести код. В моем примере кода я анализирую строку String для int.

До конца массива разбор продолжается. Если возникает исключение, поместите его на карту . Карта содержит имя поля, для которого цикл цикла выполняется как ключ и сообщение об исключении как значение.

В конце массивов проверьте карту, нужно ли выбрасывать исключение для вызывающего класса.

public class ExceptionHadlingTest { 

    public static void main(String[] args) { 
     A1 a1 = new A1(); 
     a1.test(); 
    } 
} 
class A1 { 
    public void test() { 

     B1 b1= new B1(); 
     try { 
      b1.test1(); 
     } catch (Exception e) { 
     } 
    } 
} 

class B1 { 
    public void test1() throws Exception { 
     Map<String, String> exceptions = new HashMap<String, String>(); 
     String[] array = {"1","a","2","b","6"}; 
     for (int i=0; i< array.length ; i++) { 
      try { 
       int a = Integer.parseInt(array[i]); 
      } catch (Exception e) { 
       exceptions.put(array[i], e.getMessage()); 
      } 
     } 
     if(exceptions.size() > 0) { 
      System.out.println("Total Number of exception " + exceptions.size()); 
      for (Entry<String, String> entry : exceptions.entrySet()) { 
       System.out.println(entry.getKey() + " " + entry.getValue()); 
      } 
      throw new Exception(); 
     } 
    } 
    private int parse(String str) { 
     int a = Integer.parseInt(str); 
     return a; 
    } 
} 

Вы также можете использовать customException внутри для.

Смежные вопросы