条件检查并返回无变量,调用方法两次:可能吗?

时间:2010-11-23 04:14:50

标签: java

在提交前审核时,我意识到这个问题可能非常愚蠢。

if (this.gameOver(gpos) > 0) {
    //do stuff
    return this.gameOver(gpos);
}

比较

if (this.gameOver()) {
    //do stuff
    return this.gameOver(gpos);
}

我怀疑第一个例子是否会在开始时调用this.gameOver(gpos);两次或只调用一次。显然,它确实调用了两次(对吗?),但有没有办法(没有中间变量)让它检查条件并同时在return语句中?

3 个答案:

答案 0 :(得分:1)

第一个实现将两次调用this.gameOver(gpos)。我不知道有条件地返回该值而不是临时存储的干净方法。有什么理由不能在这里使用临时变量吗?有一些hackish解决方案使代码可读性降低(并且可能更慢)。

答案 1 :(得分:0)

虽然我认为这是糟糕的设计,但我相信它可以满足您的需求:

boolean gameOver(GamePosition gp) {
   // example
   if (this.gameOver)
     return true;
   else
     throw new Exception();
}

void someMethod() {
  try {
    return gameOver(gp);
  } catch (Exception e) {
    // other logic for when the game is not over
  }
}

现在,更好的设计是只有一个方法isGameOver(gp),如你所提到的,将其存储到局部变量。

答案 2 :(得分:0)

我相信observer pattern在这里会很好用。

基本上,你会有像观察者Console类(想想xbox控制台等)这样的东西,它是任何可观察的Game类的观察者。游戏完成后,它可以触发事件以通知Console Game已完成,殴打,暂停等。

许多GUI框架(如GWT,RCP等)都可以利用观察者在窗口/视图之间发布事件。