не может иметь правильное возвращаемое значение в java-методе типа данных boolean [duplicate]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

9
задан user2864740 26 July 2014 в 04:05
поделиться

10 ответов

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

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

if(condition)
{
 return;
}
else
{
 return;
}
5
ответ дан Community 19 August 2018 в 03:50
поделиться
  • 1
    Я думаю, что в целом он должен просто узнать, что ему нужно вернуть результат перед последней скобкой каждого непустого метода. Потому что он собирается перефразировать свой вопрос тем, что еще окружает в следующий раз. – CodeCamper 14 April 2014 в 12:00
  • 2
    Я бы сказал, что использование нескольких операторов возврата не является решением. Лучше иметь только один оператор return в конце функции / метода. – Victor Polevoy 14 April 2014 в 12:19

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

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

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

2
ответ дан bNd 19 August 2018 в 03:50
поделиться

Это потому, что если вы не пойдете в if, нет ничего, чтобы вернуться, поэтому он пропустит возвращение. :)

должно быть:

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    return y;
}
0
ответ дан Clad Clad 19 August 2018 в 03:50
поделиться

Это незаконный синтаксис. Для вас необязательно возвращать переменную. Вы ДОЛЖНЫ возвращать переменную типа, указанного в вашем методе.

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.
}
2
ответ дан CodeCamper 19 August 2018 в 03:50
поделиться

Вы должны добавить оператор 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:

Oracle docs for return statement

0
ответ дан d3vnico 19 August 2018 в 03:50
поделиться

Это вернет строку , только если условие истинно.

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    else
       return "";
}
0
ответ дан Deepak Tiwari 19 August 2018 в 03:50
поделиться

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

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

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

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

Вы можете решить вашу проблему:

public String myMethod()
{
    String result = null;
    if(condition)
    {
       result = x;
    }
    return result;
}
3
ответ дан Guillermo Merino 19 August 2018 в 03:50
поделиться

Любой метод myMethod () должен возвращать значение String. Что, если ваше условие ложно, myMethod возвращает что-нибудь? ans нет, поэтому вам нужно определить return null или некоторое строковое значение в ложном состоянии

public String myMethod() {
    boolean c=true;
    if (conditions) {
        return "d";
    }
    return null;//or some other string value
}
0
ответ дан loknath 19 August 2018 в 03:50
поделиться

попробуйте следующее:

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

   return ""; //returns empty string
}
0
ответ дан Plengo 19 August 2018 в 03:50
поделиться
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

}
0
ответ дан TheLostMind 19 August 2018 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: