“Declaración de devolución faltante” dentro de if / for / while

Tengo una pregunta con respecto a declaraciones de devolución usadas dentro de if() while() o for() declaraciones. Como puede ver en el siguiente método, se espera que return un valor String. El problema es que si yo fuera a usar un return dentro de mi bloque de sentencia if , el comstackdor devolvería la missing return statement error que missing return statement .

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

Por supuesto, podría cambiar el encabezado del método para void y usar System.out.println lugar de return . Pero, ¿es esta la forma correcta de hacerlo? ¿Me estoy perdiendo de algo?

Cualquier ayuda es muy apreciada.

Si coloca return statement en if , while o for statement, puede o no devolver el valor. Si no va dentro de esta statement, entonces también ese método debería devolver algún valor (que podría ser nulo). Para asegurarse de que, el comstackdor lo forzará a escribir esta statement de devolución que está después de if , while o for .

Pero si escribe bloque if / else y cada uno de ellos tiene return en él, entonces el comstackdor sabe que if o else obtendrá execute y method devolverá un valor. Así que esta vez el comstackdor no te forzará.

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

Eso es porque la función necesita devolver un valor. Imagine lo que sucede si ejecuta myMethod() y no entra if(condition) ¿cuál sería su función? El comstackdor necesita saber qué devolver en cada ejecución posible de su función

Comprobando la documentación de Java:

Definición: Si una statement de método tiene un tipo de retorno, entonces debe haber una statement de devolución al final del método. Si la statement de devolución no está allí, se arroja el error de statement de devolución faltante.

Este error también se produce si el método no tiene un tipo de devolución y no se ha declarado usando vacío (es decir, se omitió por error).

Puedes hacer para resolver tu problema:

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

Pruebe con, como si la if condition devuelve falso, por lo que volverá vacío, de lo contrario, no devolverá nada.

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

Debido a que el comstackdor no sabe si alguna vez se alcanzará alguno de esos bloques, le dará un error.

Esa es la syntax ilegal . No es opcional que devuelva una variable. DEBE devolver una variable del tipo que especifique en su método.

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

En realidad estás diciendo, prometo que cualquier clase puede usar este método (público) y prometo que siempre devolverá una Cadena (Cadena).

Entonces estás diciendo SI mi condición es verdadera, devolveré x. Bueno, eso es muy malo, no hay IF en tu promesa. Prometiste que myMethod SIEMPRE devolverá una Cadena. Incluso si su condición SIEMPRE es verdadera, el comstackdor debe suponer que existe la posibilidad de que sea falsa. Por lo tanto, siempre debe devolver el dinero al final de su método no válido fuera de cualquier condición. SOLO EN CASO de que fallen todas sus condiciones.

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

Es porque si no ingresas en el if, no hay nada que devolver, por lo que se pierde una devolución. 🙂

debiera ser :

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

Esto devolverá la cadena solo si la condición es verdadera.

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

prueba esto:

 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 } 

Debe agregar una statement de devolución si la condition es 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:

Documentos de Oracle para statement de devolución

¿De qué manera miMétodo () debería devolver un valor de cadena? ¿Qué sucede si mi condición es falsa? ¿MyMethod devuelve algo? ans no es así, entonces necesita definir null de retorno o algún valor de cadena en condición falsa

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