Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Если вы поместите оператор return в оператор if
, while
или for
, то он может или не может возвращать значение. Если он не войдет внутрь этого утверждения, тогда также этот метод должен вернуть некоторое значение (которое может быть нулевым). Чтобы убедиться, что компилятор заставит вас написать этот оператор return, который после if
, while
или for
.
Но если вы пишете блок if
/ else
и каждый из них возвращается в нем, тогда компилятор знает, что либо if
, либо else
получат выполнение, и метод вернет значение. Поэтому этот компилятор времени не заставит вас.
if(condition)
{
return;
}
else
{
return;
}
Попробуйте, как если бы if condition
возвращает false, поэтому он будет возвращать пустой, иначе ничего не вернуться.
public String myMethod()
{
if(condition)
{
return x;
}
return ""
}
Поскольку компилятор не знает, будет ли какой-либо из этих блоков if , поэтому он дает вам ошибку.
Это потому, что если вы не пойдете в if, нет ничего, чтобы вернуться, поэтому он пропустит возвращение. :)
должно быть:
public String myMethod()
{
if(condition)
{
return x;
}
return y;
}
Это незаконный синтаксис. Для вас необязательно возвращать переменную. Вы ДОЛЖНЫ возвращать переменную типа, указанного в вашем методе.
public String myMethod()
{
if(condition)
{
return x;
}
}
Вы эффективно говорите: Я обещаю , любой класс может использовать этот метод (общедоступный), и я обещаю он всегда будет возвращать String (String).
Тогда вы говорите, что мое условие истинно, я верну x. Ну, это слишком плохо, в вашем обещании нет IF. Вы обещали, что myMethod ВСЕГДА вернет String. Даже если ваше условие ВСЕГДА истинно, компилятор должен предположить, что существует вероятность того, что он является ложным. Поэтому вам всегда нужно поместить возврат в конце вашего не-void-метода вне любых условий. JUST IN CASE все ваши условия терпят неудачу.
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //or whatever the default behavior will be if all of your conditions fail to return.
}
Вы должны добавить оператор return, если condition
является ложным.
public String myMethod() {
if(condition) {
return x;
}
// if condition is false you HAVE TO return a string
// you could return a string, a empty string or null
return otherCondition;
}
FYI:
Это вернет строку , только если условие истинно.
public String myMethod()
{
if(condition)
{
return x;
}
else
return "";
}
Это потому, что функция должна вернуть значение. Представьте, что произойдет, если вы выполните myMethod()
, и он не войдет в if(condition)
, что бы ваша функция вернулась? Компилятор должен знать, что нужно возвращать при каждом возможном выполнении вашей функции
Проверка документации по Java:
Определение: если декларация метода имеет тип возврата, тогда должно быть оператор возврата в конце метода. Если в операторе return нет ошибки, возвращаемой командой return.
Эта ошибка также возникает, если метод не имеет типа возврата и не был объявлен с использованием void (т. Е. Он был ошибочно опущен ).
blockquote>Вы можете решить вашу проблему:
public String myMethod() { String result = null; if(condition) { result = x; } return result; }
Любой метод myMethod () должен возвращать значение String. Что, если ваше условие ложно, myMethod возвращает что-нибудь? ans нет, поэтому вам нужно определить return null или некоторое строковое значение в ложном состоянии
public String myMethod() {
boolean c=true;
if (conditions) {
return "d";
}
return null;//or some other string value
}
попробуйте следующее:
public String myMethod()
{
if(condition)
{
return x;
}
return ""; //returns empty string
}
public String myMethod() // it ALWAYS expects a String to be returned
{
if(condition) // will not execute always. Will execute only when condition is true
{
return x; // will not be returned always.
}
//return empty string here
}
return
в конце функции / метода. – Victor Polevoy 14 April 2014 в 12:19