Есть ли способ обработать исключение в конструкторе. Каждый раз, когда я использую getter в другом методе, я должен снова объявить исключение. Я попробовал блок try/catch внутри конструктора, но все еще просил другой метод объявить исключение.Обработка общего исключения в конструкторе
ответ
Бросьте его из конструктора и обрабатывайте его в другом месте. Когда конструктор сталкивается с исключительной ситуацией, должен генерировать исключение вместо продолжения и полного построения объекта.
Представьте, если FileInputStream
не выбрасывает FileNotFoundException
.
Конструкторы могут и должны бросать исключения, когда что-то ломается. Код, вызывающий конструктор (или выше в стеке), обрабатывает его по своему усмотрению (повторное попытку, сбой и т. Д.). В качестве бонуса, half constructed object becomes available for garbage collection, без необходимости слишком беспокоиться об этом.
Предполагая, что Question()
бросает FileNotFoundException
, вы можете обрабатывать что-то ошибки, как это (я не знаю, ваше реальное приложение, очевидно, так это сделано в качестве примера обработки ошибок):
Question loadQuestion(int id) throws FileNotFoundException {
return new Question(getQuestionPath(id));
}
называют:
Set<Question> getQuestionsByCategory(QuestionCategory category) {
Set<Integer> ids = getQuestionIds(category);
Set<Question> questions = new HashSet<Question>();
for (Integer id : ids) {
try {
questions.add(loadQuestion(id));
} catch (FileNotFoundException ex) {
somelogger("File not found loading question ID " + id, ex);
throw ex;
}
}
return questions;
}
и, наконец,
public static void main(String[] args) throws FileNotFoundException {
Set<Questions> questions = QuestionsLoader
.getQuestionsByCategory(QuestionCategory.valueOf(args[0]));
}
В этом примере я записываю его в код, отвечающий за загрузку вопросов по категориям, а затем повторно бросаю его, чтобы он взорвался. Я решил сделать это, потому что неспособность открыть локальный файл кажется чем-то смертельным здесь, но вы не ограничены этим. Вместо этого вы можете просто не включать вопрос в возвращаемые результаты или попросить другой путь к поиску. Суть в том, что делать с ошибкой, в конечном итоге в контексте того, что вам нужно.
, это означает, что я использую второй конструктор, а затем используйте блок try/catch в другом методе, который использует (в данном случае getter) и обрабатывает его там. Спасибо за вход – JPark
Спасибо, наконец, понял, что вы пытаетесь сказать после 3 дней чтения. Почему я не могу дать kudos btw – JPark
- 1. Исключения в конструкторе
- 2. Ловля исключения в конструкторе
- 3. Обработка Исключения, которые происходят в конструкторе контроллера MVC asp.net
- 4. Передача общего массива в конструкторе
- 5. Singleton: Метание исключения в конструкторе
- 6. Исключение исключения в конструкторе Scala
- 7. Выбрасывание исключения в конструкторе (java)
- 8. Обработка исключений в блоке исключения
- 9. Обработка ошибок в конструкторе Promise
- 10. Как назначить члены общего типа в конструкторе общего типа?
- 11. Обработка исключения в потоке
- 12. Обработка исключения в Javaparser
- 13. Обработка исключения в ByteToMessageDecoder
- 14. Обработка исключения в задаче
- 15. Замечание общего исключения Delphi
- 16. Случай для обмана общего исключения в Python?
- 17. Как лучше обрабатывать исключения в конструкторе?
- 18. Выбрасывание исключения в конструкторе класса C++
- 19. Обработка блока try-catch в конструкторе C++
- 20. Ninject Mvc Обработка исключений в конструкторе контроллера
- 21. Обработка iDisposable в неудавшемся инициализаторе или конструкторе
- 22. Обработка необработанного исключения
- 23. Обработка NLua C# Исключения
- 24. Обработка исключения ConnectionLost в twisted
- 25. Обработка исключения DBNull в VB.net
- 26. Обработка исключения таймаута в Python
- 27. Обработка исключения в python tkinter
- 28. Обработка обернутого исключения в Camel
- 29. Обработка исключения в C# backgroundWorker
- 30. Обработка исключения в ядре asp.net?
Конструкторы AFAIK обрабатывают блоки захвата, как и любой другой код. Вы уверены, что поставили try catch в нужное место? –
Да, у первого есть try catch/block, а второй нет, не уверен, хотя если его правильно поместить – JPark
Почему у вас есть два одинаковых конструктора в примере? Я не понимаю, есть ли у вас блок try-catch, почему он попросит вас объявить исключение? Не могли бы вы опубликовать код, который на самом деле заставляет вас это делать? –