“Dichiarazione di reso mancante” entro se / per / mentre

Ho una domanda riguardante le dichiarazioni di reso utilizzate all’interno delle istruzioni if() while() o for() . Come puoi vedere nel seguente metodo, mi aspetto che io return un valore String. Il problema è che se dovessi usare un return all’interno del mio blocco if , il compilatore restituirebbe l’errore missing return statement .

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

Ovviamente potrei cambiare l’intestazione del metodo in void e usare System.out.println invece di return . Ma è questo il modo giusto per farlo? mi sto perdendo qualcosa?

Qualsiasi aiuto è molto apprezzato.

Se metti l’istruzione di ritorno in if , while o for statement allora può o non può restituire valore. Se non entrerà in queste istruzioni, anche quel metodo dovrebbe restituire un valore (che potrebbe essere nullo). Per garantire che, il compilatore ti costringerà a scrivere questa dichiarazione di ritorno che è dopo if , while o for .

Ma se si scrive if / else blocca e ognuno di essi sta tornando in esso, il compilatore sa che else otterrà execute e il metodo restituirà un valore. Quindi questo compilatore di tempo non ti costringerà.

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

Questo perché la funzione deve restituire un valore. Immagina cosa succede se esegui myMethod() e non entra in if(condition) cosa restituirebbe la tua funzione? Il compilatore deve sapere cosa restituire in ogni esecuzione ansible della tua funzione

Controllo della documentazione di Java:

Definizione: se una dichiarazione del metodo ha un tipo restituito, deve essere presente un’istruzione return alla fine del metodo. Se l’istruzione return non è presente, viene generato l’errore dell’istruzione return mancante.

Questo errore viene generato anche se il metodo non ha un tipo restituito e non è stato dichiarato usando void (cioè, è stato omesso per errore).

Puoi fare per risolvere il tuo problema:

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

Prova con, come se la if condition restituisse false, quindi restituirà vuoto altrimenti non restituirà nulla.

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

Perché il compilatore non sa se qualcuno di quei blocchi sarà mai raggiunto, quindi ti sta dando un errore.

Questa è una syntax illegale . Non è una cosa facoltativa per te restituire una variabile. È necessario restituire una variabile del tipo specificato nel metodo.

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

Stai dicendo in modo efficace, prometto che qualsiasi class può utilizzare questo metodo (pubblico) e prometto che restituirà sempre una stringa (stringa).

Quindi stai dicendo SE la mia condizione è vera, ritornerò x. Beh, questo è un peccato, non c’è IF nella tua promise. Hai promesso che myMethod restituirà SEMPRE una stringa. Anche se la tua condizione è SEMPRE vera, il compilatore deve presupporre che ci sia la possibilità che sia falso. Di conseguenza, devi sempre restituire un valore alla fine del tuo metodo non vuoto al di fuori delle condizioni JUST IN CASE tutte le tue condizioni falliscono.

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

È perché se non si va in the, non c’è nulla da restituire, quindi manca un ritorno. 🙂

dovrebbe essere :

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

Questo restituirà la stringa solo se la condizione è vera.

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

prova questo:

 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 } 

Devi aggiungere una dichiarazione di ritorno se la condition è 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; } 

FYI:

Documenti Oracle per dichiarazione di ritorno

Qualsiasi myMethod () dovrebbe restituire un valore String. Cosa succede se la tua condizione è falsa? MyMethod restituisce qualcosa? ans no, quindi è necessario definire un valore null o un valore stringa in false condizioni

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