Вопрос-ответ

"Missing return statement" within if / for / while

"Отсутствует оператор return" в if / for / while

У меня вопрос относительно операторов return, используемых в операторах if() while() or for().

Как вы можете видеть в следующем методе, он ожидает, что I return строковое значение. Проблема в том, что если бы я использовал return оператор в моем if блоке инструкций, компилятор вернул бы ошибку missing return statement.

public String myMethod()
{
if(condition)
{
return x;
}
}

Конечно, я мог бы изменить заголовок метода на void и использовать System.out.println вместо return. Но правильный ли это способ сделать это? Я что-то упускаю?

Переведено автоматически
Ответ 1

Если вы поместите оператор return в оператор if, while или for, то он может возвращать значение, а может и не возвращать. Если он не будет входить в эти операторы, то также этот метод должен возвращать некоторое значение (которое может быть null). Чтобы гарантировать это, компилятор заставит вас написать этот оператор return, который находится после if, while или for.

Но если вы пишете блок if / else и в каждом из них есть возвращаемое значение, тогда компилятор знает, что либо if or else будет выполнено, и метод вернет значение. Итак, на этот раз компилятор не будет заставлять вас.

if(condition)
{
return;
}
else
{
return;
}
Ответ 2

Это потому, что функции нужно вернуть значение. Представьте, что произойдет, если вы выполните myMethod() и это не войдет в if(condition) что вернет ваша функция? Компилятор должен знать, что возвращать при каждом возможном выполнении вашей функции.

Проверка документации Java:


Определение: Если объявление метода имеет возвращаемый тип, то в конце метода должен быть оператор return . Если оператора return там нет, выдается ошибка "отсутствует оператор return".


Эта ошибка также возникает, если метод не имеет возвращаемого типа и не был объявлен с использованием void (т. Е. Он был ошибочно опущен).


Вы можете сделать это, чтобы решить свою проблему:

public String myMethod()
{
String result = null;
if(condition)
{
result = x;
}
return result;
}
Ответ 3

Это недопустимый синтаксис. Возвращать переменную не необязательно для вас. Вы должны возвращать переменную того типа, который вы указываете в своем методе.

public String myMethod()
{
if(condition)
{
return x;
}
}

Фактически вы говорите: я обещаю, что любой класс может использовать этот метод (public), и я обещаю, что он всегда будет возвращать строку (String).

Тогда вы говорите, ЧТО ЕСЛИ мое условие верно, я верну x . Что ж, это очень плохо. В вашем обещании нет никакого IF. Вы обещали, что myMethod всегда будет возвращать строку.

Даже если ваше условие всегда истинно, компилятор должен предположить, что существует вероятность того, что оно может быть ложным. Поэтому вам всегда нужно помещать return в конец вашего метода non-void вне каких-либо условий, на случай, если все ваши условия не будут выполнены.

public String myMethod()
{
if(condition)
{
return x;
}
return ""; // Or whatever the default behavior will be if all of your conditions fail to return.
}
Ответ 4

Попробуйте с, как если бы if condition возвращает false , поэтому он вернет пустой, в противном случае возвращать нечего.

public String myMethod()
{
if(condition)
{
return x;
}
return ""
}

Поскольку компилятор не знает, будет ли когда-либо достигнут какой-либо из этих блоков if, он выдает ошибку.

java