Я столкнулся с ситуацией, когда не-void метод отсутствует оператор return, и код все еще компилируется. Я знаю, что утверждения после цикла while недоступны (мертвый код) и никогда не будут выполнены. Но почему компилятор даже не предупреждает о возвращении чего-то? Или почему язык позволяет нам иметь непустой метод, имеющий бесконечный цикл и ничего не возвращающий?
public int doNotReturnAnything() {
while(true) {
//do something
}
//no return statement
}
Если в цикле while добавить оператор break (даже условный), компилятор жалуется на печально известные ошибки: "Метод не возвращает значение" (Eclipse) и "Не все пути кода возвращают значение" ( Visual Studio)
public int doNotReturnAnything() {
while(true) {
if(mustReturn) break;
//do something
}
//no return statement
}
Это справедливо как для Java, так и для С#