2013-04-25 3 views
0

В настоящее время я пишу простую программу на Java в ответ на вопрос. В этом вопросе говорится:Как реализовать правильную обработку Исключения в Java?

Вы исправляете ошибку, когда документы (представленные в виде строки) не могут быть преобразованы в соответствующий xml. Эта проблема может возникнуть из-либо:
А. Некоторые символы сбой в XML или
B. Документы, принятые в имеют длину> 100 символов (они небольшие документы)

Затем он перечисляет 5 символов которые требуют ускорения (например, заменить «>>» на escape-последовательность;).

Я закодировал деталь, чтобы заменить специальные символы экранами, но я не уверен, что делать с длиной.

if (length of string > 100) { 
    do what? 
} 

Я думал о том, что возможно реализовать инструкцию try catch, но это используется для исключений времени выполнения правильно? (нулевой указатель и т. д.). С точки зрения дизайна, какой был бы лучший способ избежать этой ошибки и в то же время завершить работу функции?

+0

Возможно, вы думаете о том, чтобы выбрасывать исключение, а не ловить его -> 'throw' – SJuan76

+0

' try-catch' используется точно для исключений, которые являются * не * типа 'RuntimeException'. –

+3

@ TheodorosChatzigiannakis Категорически не соответствует действительности. –

ответ

3

Вы не обрабатывает исключение здесь, а вы, вероятно, следует бросить один:

private static final int MAX_LENGTH = 100; 
// ... 

if (inputString.length() > MAX_LENGTH) { 
    throw new IllegalArgumentException(
     String.format("String is too large. Found %d characters, maximum is %d.", 
      inputString.length(), MAX_LENGTH)); 
} 

Это типичный способ вы уведомить пользователя о вашем методе, что они нарушили API. Убедитесь, что в вашей документации по методу указано, что строка не может превышать 100 символов.

+0

Это то, что я искал, я забыл об исключении. Благодарю. – user2319056

+1

FWIW, что сообщение об исключении было бы * намного более полезным, если бы оно включало наблюдаемую длину строки и предел. Например. '" Строка слишком велика (найдено 532 символа, максимально допустимое - 100 символов) ". Говоря по опыту, сообщение об ошибке, которое просто говорит «нет», менее полезно (/ более бесит), чем сообщение, которое говорит вам * почему *. –

+0

@ AndrzejDoyle Очень верно. Я кратко опустил этот уровень детализации для краткости, но вы совершенно правы. Я отредактировал соответственно. –

0

Создайте свой собственный класс Exception:

public class FileTooLongForXmlException extends Exception{ 
    public FileTooLongForXmlException() { 
     super("Your file is > 100 carac"); 
    } 
} 

И тогда вы просто сделать:

if (length of string > 100) { 
    throw new FileTooLongForXmlException(); 
} 
+1

... возможно. Я всегда старался использовать существующее исключение (например, 'IllegalArgumentException'). –

+0

Ну, я думаю, это зависит, если это библиотечно-ориентированное, возможно, было бы полезно создать свои собственные Исключения, но я согласен, что оба ответа в порядке – NeeL

1

Исключение должно произойти, когда что-то исключительного происходит. Вы никогда не должны кодировать использование исключения для управления своей бизнес-логикой (особенно, если это исключение третьей стороны, такое как NoEntityFound, что делать, если изменяются правила вокруг исключения третьей стороны?).

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

throw new IllegalStringLength("String length invalid"); 

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

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

1

Если вы правильно поняли, ваша функция преобразует строки длиной < 100 в XML. Таким образом, с точки зрения дизайна я не вижу проблемы при вызове исключения IllegalArgumentException, когда заданная длина строк равна> = 100.

Не следует пытаться продолжить выполнение, есть причина, по которой Исключения останавливают выполнение функции - до гарантировать правильные результаты, которые соответствуют контракту функции.

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