Я хотел бы проконсультироваться об обработке исключений кода JDK,
В ScriptEngineManager из строк 120 есть неиспользуемый вторичный улов для ServiceConfigurationError
, который не может быть выдан, как я понимаю
try {
while (itr.hasNext()) {
try {
ScriptEngineFactory fact = (ScriptEngineFactory) itr.next();
facList.add(fact);
} catch (ServiceConfigurationError err) {
System.err.println("ScriptEngineManager providers.next(): "
+ err.getMessage());
if (DEBUG) {
err.printStackTrace();
}
// one factory failed, but check other factories...
continue;
}
}
} catch (ServiceConfigurationError err) {
System.err.println("ScriptEngineManager providers.hasNext(): "
+ err.getMessage());
Есть ли причина, по которой потребуется второй улов?кажется, что это влияет только на while (itr.hasNext())
, который не генерирует никаких исключений
Или это слишком чрезмерно осторожно, чтобы гарантировать, что метод не вызывает исключение в любом случае, как прокомментировано
// do not throw any exception here.
На самом деле java позволяет вам дублировать такой try-catch без каких-либо ошибок / предупреждений:
try {
try {
ScriptEngineFactory fact = itr.next();
engineSpis.add(fact);
} catch (ServiceConfigurationError err) {
err.printStackTrace();
}
} catch (ServiceConfigurationError err) {
err.printStackTrace();
}
Если я объединю ловушки в той же попытке, я получу ошибку компиляции
Unreachable catch block for ServiceConfigurationError. It is already handled by the catch block for ServiceConfigurationError