web-dev-qa-db-ja.com

if / for / while内の「欠落したreturnステートメント」

if()while()またはfor()ステートメント内で使用されるreturnステートメントに関して質問があります。次のメソッドでわかるように、I returnが文字列値であることを期待しています。問題は、returnステートメントブロック内でifステートメントを使用すると、コンパイラがエラーmissing return statement

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

もちろん、メソッドヘッダーをvoidに変更し、System.out.printlnの代わりにreturn。しかし、これは正しい方法ですか?私は何かが欠けていますか?

どんな助けも大歓迎です。

14
user3531560

Returnステートメントをifwhile、またはforステートメントに配置すると、値を返す場合と返さない場合があります。これらのステートメントの内部に入らない場合、そのメソッドは何らかの値(nullの可能性がある)を返す必要があります。これを確実にするために、コンパイラはifwhile、またはforの後にあるこのreturnステートメントを書くように強制します。

しかし、あなたがif/elseブロックを書き、それらのそれぞれがリターンを持っている場合、コンパイラはifまたはelseのいずれかが実行され、メソッドは値を返します。そのため、今回はコンパイラーはあなたを強制しません。

if(condition)
{
 return;
}
else
{
 return;
}
9

これは、関数needsが値を返すためです。 myMethod()を実行し、それがif(condition)に入らないとどうなるか想像してみてください。コンパイラーは、関数のすべての可能な実行で何を返すかを知る必要があります

Java documentation:

定義:メソッド宣言に戻り型がある場合、メソッドの最後にreturnステートメントがなければなりません。 returnステートメントが存在しない場合、returnステートメントが見つからないというエラーがスローされます。

このエラーは、メソッドに戻り値の型がなく、voidを使用して宣言されていない(つまり、誤って省略された)場合にもスローされます。

あなたの問題を解決するために行うことができます:

public String myMethod()
{
    String result = null;
    if(condition)
    {
       result = x;
    }
    return result;
}
5

if conditionはfalseを返すため、空を返します。それ以外の場合は何も返しません。

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

コンパイラは、それらのifブロックに到達するかどうかわからないため、エラーが発生します。

2
bNd

それは不正な構文です。 not an optional変数を返すことです。メソッドで指定した型の変数を返さなければなりません。

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

事実上、I promiseすべてのクラスがこのメソッド(public)を使用でき、常にString(String)を返すと約束しています。

その後、私の条件が真である場合、私はxを返すと言っています。まあそれはあまりにも悪いです、あなたの約束にはIFはありません。 myMethodは常に文字列を返すと約束しました。たとえ条件が常に真であったとしても、コンパイラはそれが偽である可能性があると仮定しなければなりません。そのため、すべての条件が失敗した場合に必ず、任意の条件の外にある非voidメソッドの最後にリターンを配置する必要があります。

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

conditionがfalseの場合、returnステートメントを追加する必要があります。

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;  
}

参考までに:

returnステートメントのOracleドキュメント

0
d3vnico

Ifに行かないと、戻るものが何もないので、戻りを逃すからです。 :)

する必要があります:

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

これは、文字列を返しますif条件がtrueの場合のみ。

public String myMethod()
{
    if(condition)
    {
       return x;
    }
    else
       return "";
}
0
Deepak Tiwari

MyMethod()が文字列値を返す方法。条件がfalseの場合、myMethodは何を返しますか。 ansはnoですので、nullまたはfalse条件で文字列値を返すように定義する必要があります

public String myMethod() {
    boolean c=true;
    if (conditions) {
        return "d";
    }
    return null;//or some other string value
}
0
loknath

これを試して:

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

   return ""; //returns empty string
}
0
Plengo
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