2013-11-16 1 views
1

Почему NoSuchElementFoundException a RuntimeException aka unchecked error? У меня есть ошибки Unchecked, ошибки программистов правильные, поэтому что, если пользователь вводит файл, который нужно прочитать, и он существует, но пуст. Это не ошибка программистов, так как это имеет смысл?обработка исключений не отмечена по сравнению с проверкой

+4

где вы получите представление, что ошибки во время выполнения или непроверенные исключения программисты вина? –

+1

Существуют методы проверки наличия элемента перед его извлечением, поэтому в некотором смысле это ошибка программистов. – Henry

+0

Ошибка программиста в том, что отсутствует соответствующий защитный код. В контексте этого вопроса проверка с hasNext() перед вызовом next() - правильный способ сделать это. В большинстве случаев вы можете уйти без вызова hasNext() (например, если вы выполняете линейный поиск, и элемент найден на ранней стадии), но иногда он вас укусит. – Chandranshu

ответ

1

Я думаю, что термин «ошибка» здесь немного вводит в заблуждение.

Исключенное исключение, как правило, такое, которое программа должна улавливать и обрабатывать соответствующим образом, в то время как исключенное исключение, как правило, должно быть предотвращено. Если метод содержит строку throw new NoSuchElementException(), это означает, что эта линия не должна быть достигнута, и если она будет достигнута, это, вероятно, означает ошибку в некотором вызывающем методе.

В случае java.util.Scanner, что, я думаю, это то, что вы имеете в виду, причина, по которой он вызывает NoSuchElementException, когда вы звоните, например. nextLong(), и файл пуст, это то, что вы должны были позвонить hasNextLong(), чтобы проверить заранее, безопасно ли это. Единственная причина, по которой вы не позвонили бы hasNextLong(), - это, если вы действительно ожидаете, что долго будет присутствовать (например, если вы читаете файл конфигурации, входящий в комплект поставки вашей программы).

1

Почему NoSuchElementFoundException исключение RuntimeException aka unchecked error?

Потому что так оно и было спроектировано!

У меня есть Unchecked ошибки программистов придираться право ...

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

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

В этом случае, «программисты вина», потому что он мог (и, возможно, должны) быть проверены на условия с использованием метода has* перед вызовом метода next*.

Но это своего рода рядом с точкой ...

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