В следующем методе компилятор жалуется на отсутствующий оператор возврата, хотя существует только один путь через метод, и он содержит инструкцию return
. Для подавления ошибки требуется другой оператор return
.Компилятор жалуется на «отсутствующий оператор возврата», даже если невозможно достичь условия, при котором оператор возврата будет отсутствовать.
public int foo() {
if (true) {
return 5;
}
}
Учитывая, что Java compiler can recognize infinite loops, почему он не справиться с этой ситуацией, а? Связанный вопрос подсказывает, но не содержит подробностей для этого конкретного случая.
в 'foo4()' компилятор не настолько умен, что он понимает, что функция всегда возвращает 5. Он просто проверяет, что не все пути кода возвращают что-то. –
Если оператор обрабатывается специально в анализе потока, см. JLS 14.21: * Оператор if ... обрабатывается необычным образом. По этой причине это обсуждается отдельно в конце этого раздела * – irreputable
@irreputable В будущем, если вы хотите оспаривать закрытие вопроса, подумайте о том, чтобы помечать сообщение для просмотра модератора или публикации на [meta]. Это намного более конструктивно, чем бегать вокруг оскорбительных людей или вандализма. –