if / for / while中的“缺less返回语句”
我有一个关于if()
while()
或for()
语句中使用的return语句的问题。 正如你在下面的方法中看到的那样,期望我return
一个String值。 问题是,如果我在哪里使用if
语句块中的返回值,编译器将返回错误missing return statement
。
public String myMethod() { if(condition) { return x; } }
当然,我可以改变方法头为void
并使用System.out.println
而不是return
。 但是,这是正确的做法吗? 我错过了什么?
任何帮助,高度赞赏。
如果你把return语句放在if
, while
或for
语句中,那么它可能会也可能不会返回值。 如果它不会进入这些语句,那么该方法应该返回一些值(可能为空)。 为了确保这一点,编译器会强制你写这个if
, while
或for
之后的return语句。
但是如果你编写if
/ else
块,并且每个块都有返回值,那么编译器就会知道if
或者将会得到execute,并且方法会返回一个值。 所以这次编译器不会强迫你。
if(condition) { return; } else { return; }
这是因为函数需要返回一个值。 想象一下,如果执行myMethod()
会发生什么情况,而不会进入if(condition)
函数将返回什么? 编译器需要知道在函数的每个可能的执行中要返回什么
检查Java文档:
定义:如果一个方法声明有一个返回types,那么在该方法的末尾必须有一个return语句。 如果返回语句不存在,则抛出丢失的返回语句错误。
如果该方法没有返回types,并且没有使用void声明,也会抛出这个错误(即错误地被忽略)。
你可以做解决你的问题:
public String myMethod() { String result = null; if(condition) { result = x; } return result; }
试试看, if condition
返回false,那么它将返回空,否则没有任何返回。
public String myMethod() { if(condition) { return x; } return "" }
因为编译器不知道是否有任何这样的块将被达到,所以它给你一个错误。
这是非法的语法 。 对于你来说,返回一个variables是不 可选的。 你必须返回你在方法中指定的types的variables。
public String myMethod() { if(condition) { return x; } }
你有效地说, 我保证任何类都可以使用这个方法(public),我保证它总是会返回一个String(String)。
那么你说如果我的条件是真的,我会返回x。 那太糟糕了,你的诺言没有IF。 你答应myMethod总是返回一个string。 即使你的条件总是正确的,编译器也必须假定它有可能是错误的。 因此,在任何情况之外,您总是需要在非空方法的末尾放置一个返回值。只是在所有情况都失败的情况下。
public String myMethod() { if(condition) { return x; } return ""; //or whatever the default behavior will be if all of your conditions fail to return. }
因为如果你不进去,没有什么可以回来的,所以错过了回报。 🙂
应该 :
public String myMethod() { if(condition) { return x; } return y; }
只有当条件为真时,这将返回string。
public String myMethod() { if(condition) { return x; } else return ""; }
尝试这个:
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 }
如果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; }
供参考:
Oracle文档用于返回语句
任何如何myMethod()应该返回一个string值。如果您的条件是错误的是myMethod返回什么? 答案是否定的,所以你需要在假的条件下定义返回null或一些string值
public String myMethod() { boolean c=true; if (conditions) { return "d"; } return null;//or some other string value }