Почему NoSuchElementFoundException
a RuntimeException
aka unchecked error? У меня есть ошибки Unchecked, ошибки программистов правильные, поэтому что, если пользователь вводит файл, который нужно прочитать, и он существует, но пуст. Это не ошибка программистов, так как это имеет смысл?обработка исключений не отмечена по сравнению с проверкой
ответ
Я думаю, что термин «ошибка» здесь немного вводит в заблуждение.
Исключенное исключение, как правило, такое, которое программа должна улавливать и обрабатывать соответствующим образом, в то время как исключенное исключение, как правило, должно быть предотвращено. Если метод содержит строку throw new NoSuchElementException()
, это означает, что эта линия не должна быть достигнута, и если она будет достигнута, это, вероятно, означает ошибку в некотором вызывающем методе.
В случае java.util.Scanner
, что, я думаю, это то, что вы имеете в виду, причина, по которой он вызывает NoSuchElementException
, когда вы звоните, например. nextLong()
, и файл пуст, это то, что вы должны были позвонить hasNextLong()
, чтобы проверить заранее, безопасно ли это. Единственная причина, по которой вы не позвонили бы hasNextLong()
, - это, если вы действительно ожидаете, что долго будет присутствовать (например, если вы читаете файл конфигурации, входящий в комплект поставки вашей программы).
Почему NoSuchElementFoundException исключение RuntimeException aka unchecked error?
Потому что так оно и было спроектировано!
У меня есть Unchecked ошибки программистов придираться право ...
Вообще говоря, это правильно. Но более точная характеристика будет заключаться в том, что проверенное исключение - это то, которое вы ожидаете получить от конечного пользователя и/или от отчета.
... так что, если пользователь вводит файл для чтения и существует, но пуст. Это не ошибка программистов, так как это имеет смысл?
В этом случае, «программисты вина», потому что он мог (и, возможно, должны) быть проверены на условия с использованием метода has*
перед вызовом метода next*
.
Но это своего рода рядом с точкой ...
- 1. Обработка исключений: если условие по сравнению с Исключением
- 2. Обработка исключений по Reactor Spring
- 3. Предварительная обработка по сравнению с привязкой
- 4. Обработка исключений с BeautifulSoup
- 5. Обработка исключений не работает
- 6. обработка исключений с быстрым
- 7. Извлечь список неизмененных файлов по сравнению с последней проверкой
- 8. Обработка исключений с NameError
- 9. Обработка исключений
- 10. Обработка исключений с DLL
- 11. обработка исключений
- 12. Проверка хеш-значения по сравнению с проверкой содержимого?
- 13. Испытательная разработка по сравнению с автоматизированной теоретической проверкой
- 14. Обработка исключений
- 15. Обработка исключений
- 16. Обработка исключений
- 17. Обработка исключений
- 18. Обработка исключений
- 19. Обработка исключений?
- 20. Обработка исключений
- 21. Обработка исключений
- 22. Обработка исключений
- 23. Обработка исключений
- 24. По умолчанию отмечена кнопка
- 25. Обработка исключений
- 26. Обработка исключений
- 27. Обработка исключений
- 28. Java: Обработка исключений не работает
- 29. Обработка исключений для обработки исключений
- 30. Обработка исключений с помощью Structuremap
где вы получите представление, что ошибки во время выполнения или непроверенные исключения программисты вина? –
Существуют методы проверки наличия элемента перед его извлечением, поэтому в некотором смысле это ошибка программистов. – Henry
Ошибка программиста в том, что отсутствует соответствующий защитный код. В контексте этого вопроса проверка с hasNext() перед вызовом next() - правильный способ сделать это. В большинстве случаев вы можете уйти без вызова hasNext() (например, если вы выполняете линейный поиск, и элемент найден на ранней стадии), но иногда он вас укусит. – Chandranshu