2012-05-29 5 views
0

У меня есть условие, как этоНаконец блок вести себя по-разному

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (ApplicationException ae) { 
    str = "condition3"; 
}catch (IllegalStateException ise) { 
    str = "condition3"; 
}catch (Exception e) { 
    str = "condition3"; 
} 

if(str == null){ 
    str = "none"; 
} 

Теперь я хочу подвести итог все str = "condition3"; в одной строке. Поскольку, наконец, блок работает всегда так, чтобы он не отвечал моим потребностям. Что еще можно сделать.

+1

что вы имеете в виду «подвести итоги»? –

+2

Я не уверен, какую пользу вы ищете ... если вы хотите, чтобы строка ошибок была одинаковой для всех трех исключений, используйте приведенные ниже ответы. Если нет, и есть больше кода в каждом из блоков исключений, которые мы не видим, то я не вижу, что повторение одной строки все так плохо. – billjamesdev

+0

Что это значит «все str =« condition3 »? Если вы хотите подвести итог всей str, это будет состоять из cond2 и одного из трех исключений. –

ответ

6

Начиная с Java 7, вы можете catch multiple exception types в одном блоке catch. Код выглядит примерно так:

String str = null; 

try { 
    ... 
    str = "condition2"; 
} catch (ApplicationException|IllegalStateException|Exception ex) { 
    str = "condition3"; 
} 

КСТАТИ: код вы опубликовали, а также мой Java 7 код может все быть свернуты в просто catch (Exception e), потому что Exception это суперкласс как ApplicationException и IllegalStateException.

+3

Но разве это не бессмысленно, так как первые два расширения «Исключение»? Он должен просто ловить «Исключение» до тех пор, пока он это делает. –

+0

Я предполагаю, что он не показывает весь код там, поэтому группировка таких, вероятно, не сработает. – billjamesdev

+0

@PaulBellora: Да. То же самое можно сказать и о эквивалентном Java-коде OP. Я просто демонстрирую синтаксис. Тем не менее, я добавлю к этому примечание. – Asaph

2

Вы можете использовать синтаксис обработки исключений Java 7. Java 7 поддерживает множественную обработку исключений в одном блоке catch. Exp -

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (ApplicationException | IllegalStateException | Exception ae) { 
    str = "condition3"; 
} 
+0

Я не хочу группировать исключение, так как каждое исключение будет иметь отдельное сообщение и т. Д. –

+0

В этом случае вам придется следовать традиционному блоку catch try. try { ... str = "condition2"; } catch (ApplicationException ae) { str = "condition3"; } catch (IllegalStateException ise) { str = "condition3"; } catch (исключение e) { str = "condition3"; } –

1
try{ 
    ... 
    str = "condition2"; 
}catch (Exception ae) { 
str = "condition3"; 
} 

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

try{ 
    ... 
    str = "condition2"; 
}catch(ApplicationException | IllegalStateException e){ 
if(e instanceof ApplicationException) 
    //your specfic message 
    else if(e instanceof IllegalStateException) 
    //your specific message 
    else 
     //your specific message 
    str = "condition3"; 
} 
+0

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

+1

@imran tariq отредактируйте ваш вопрос соответственно – Maddy

+0

@imrantariq см. Мой отредактированный ответ. –

0

Как вы делаете то же самое в ApplicationException и IllegalStateException улове блоков и вообще исключение Exception улова блока, то вы можете удалить ApplicationException и IllegalStateException блоков.

0

Я собираюсь выйти на конечности здесь и обеспечить это:

String str = null; 

try{ 
    ... 
    str = "condition2"; 
}catch (Throwable e) { 
    str = "condition3"; 
} 
finally { 
    if(str == null){ 
     str = "none"; 
    } 
} 

Если это не то, что вы имеете в виду под «подытожить», то просьба уточнить.

Пожалуйста, ознакомьтесь с

http://www.tutorialspoint.com/java/java_exceptions.htm http://docs.oracle.com/javase/tutorial/essential/exceptions/

+0

Не думайте, что должен быть такой блок, как catchFinally .... –

+0

пояснить «catchFinally» –

+0

catchFinally будет блок, который будет выполняться только после выписок (выписок). –

1

Вы должны добавить «окончательный» ключевое слово, если вы используете Java 7 особенность ловли несколько исключений в одном блоке поймать

catch (final ApplicationException|IllegalStateException|Exception ex) { 

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

  • Нет связанных вопросов^_^