我可以让一个方法来电返回吗?

时间:2012-02-04 23:16:13

标签: java

如果我有一个调用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}}?

4 个答案:

答案 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重新抛出异常并在更高级别捕获它们,则可以避免一些代码重复。