如果我有一个调用b(x)的方法a():
int d = 0;
void a(){
int c = b(x);
d = c;
}
int b(x){
if(somecondition){
return x;
}else{
retrun null;
}
}
我是否可以编写函数b(x)
以便在更改a()
之前使d
返回,如果我不想检查c
是否是null
来自a()
内的{{1}}?
答案 0 :(得分:0)
您可能会b(x)
抛出异常,这会阻止分配到d
。但是a()
也不会正常“返回”。否则,如果不更改a()
的代码,则无法实现此目的。
答案 1 :(得分:0)
在不更改a()
代码的情况下,从b()
更改a()
控件流的唯一方法是从b()
抛出异常。如果返回null是一个错误条件,那可能是个好主意。
如果null不是错误,那么根据返回值可能需要做出一些决定,因此检查null并明确做出决定可能是您的最佳选择。
答案 2 :(得分:0)
为什么不使用简单的if子句,如:
int d = 0;
void a(){
int c = b(x);
d = (c == null) ? d : c;
}
int b(x){
if(somecondition){
return x;
}else{
return null;
}
}
答案 3 :(得分:0)
如果情况是你要在你的代码中多次调用b并且你想避免不得不一遍又一遍地重写你的空检查,那么我感到很痛苦!
如果语言支持函数指针,你可以尝试让b接受一个函数指针(这将是一个),并且只有在某些条件为真时才执行该函数。不幸的是,这在Java中并不是一个真正的选择。
可能最好的是让b抛出异常,正如“Hovercraft Full Of Eels”所暗示的那样。如果您的函数使用throws SomeConditionException重新抛出异常并在更高级别捕获它们,则可以避免一些代码重复。