“Declaração de devolução ausente” dentro de if / for / while

Eu tenho uma pergunta sobre declarações de retorno usadas dentro de declarações if() while() ou for() . Como você pode ver no método a seguir, espera-se que eu return um valor String. O problema é que se i onde usar um return dentro do meu bloco de instruções if , o compilador retornaria o erro missing return statement .

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

Claro que eu poderia alterar o header do método para void e usar System.out.println vez de return . Mas este é o caminho certo para fazer isso? estou esquecendo de algo?

Qualquer ajuda é muito apreciada.

    Se você colocar a instrução de retorno em if , while ou for statement, ela poderá ou não retornar o valor. Se não for dentro desta declaração, também esse método deve retornar algum valor (que pode ser nulo). Para garantir que, o compilador irá forçá-lo a escrever esta declaração de retorno que é depois if , while ou for .

    Mas se você escrever if / else block e cada um deles estiver retornando, o compilador saberá if ou else será executado eo método retornará um valor. Então este compilador não irá forçá-lo.

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

    Isso porque a function precisa retornar um valor. Imagine o que acontece se você executar myMethod() e não entrar em if(condition) o que sua function retornará? O compilador precisa saber o que devolver em toda execução possível de sua function

    Verificando a documentação do Java:

    Definição: Se uma declaração de método tiver um tipo de retorno, deve haver uma instrução de retorno no final do método. Se a instrução de retorno não estiver, o erro de instrução de retorno ausente será lançado.

    Este erro também é lançado se o método não tiver um tipo de retorno e não tiver sido declarado usando void (ou seja, foi omitido por engano).

    Você pode fazer para resolver seu problema:

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

    Tente com, como se if condition retornar false, então ela retornará vazia, caso contrário nada retornará.

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

    Porque o compilador não sabe se algum desses blocos if será alcançado, então está lhe dando um erro.

    Isso é syntax ilegal . Não é uma coisa opcional para você retornar uma variável. Você DEVE retornar uma variável do tipo que você especificou em seu método.

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

    Você está efetivamente dizendo, eu prometo que qualquer class pode usar esse método (public) e prometo que sempre retornará um String (String).

    Então você está dizendo que, se minha condição for verdadeira, retornarei x. Bem, isso é muito ruim, não há IF na sua promise. Você prometeu que myMethod sempre retornará uma String. Mesmo que sua condição seja SEMPRE verdadeira, o compilador tem que assumir que existe a possibilidade de ela ser falsa. Portanto, você sempre precisa colocar um retorno no final do seu método não-vazio fora de qualquer condição. APENAS CASO, todas as suas condições falharão.

     public String myMethod() { if(condition) { return x; } return ""; //or whatever the default behavior will be if all of your conditions fail to return. } 

    É porque se você não entrar no if, não há nada para devolver, por isso perder um retorno. 🙂

    deveria estar :

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

    Isso retornará a string somente se a condição for verdadeira.

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

    tente isto:

     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 } 

    Você precisa adicionar uma instrução de retorno se a condition for falsa.

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

    PARA SUA INFORMAÇÃO:

    Documentos do Oracle para instrução de retorno

    Qualquer forma como myMethod () deve retornar um valor String. E se sua condição for false myMethod retornar alguma coisa? ans não é assim, você precisa definir o valor de retorno nulo ou algum valor de string em falso

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