是否有可能提前退出构造函数?

时间:2015-02-24 23:07:10

标签: java

我想知道是否可以提前退出函数,绕过正文中的其余代码。例如:

  public class SOMECLASS {

      public SOMECLASS( int i ) {
          gotoSwitchCase(i);
          additionalTask();    // method body is irrelevant
      }

      private void gotoSwitchCase(int i) {
          switch (i) {
          case 0:
              /* exit ctor prematurely  */
              break;
          default:
              /* set some instance variables, return to ctor */
          }
      }
  }

我知道我可以在if(i==0){return;}的最开头插入additionalTask()来跳过该部分。但是,我对 更感兴趣 有一种方法可以优雅地退出构造函数(或任何函数),而无需访问其余部分。类似于例外,但不是致命的。

3 个答案:

答案 0 :(得分:5)

如果您希望提前退出函数(包括构造函数),只需使用return;命令即可​​。这也适用于构造函数。

编辑以澄清:这是解决此问题的正确方法。你不能跳过从gotoSwitchCase主体跳过构造函数的其余部分,因为gotoSwitchCase可以从构造函数或其可见的任何其他方法运行。

答案 1 :(得分:3)

这是一个简单的解决方法:返回代码。返回0跳过下一行。

public class SOMECLASS {

    public SOMECLASS(int i) {
        if (gotoSwitchCase(i) != 0) {
            additionalTask();
        }
    }

    private int gotoSwitchCase(int i) {
        switch (i) {
            case 0:
                return 0;
            default:
                /* set some instance variables, return to ctor */
                return 1;
        }
    }
}

此外,如果你抓住它们,例外并不致命。您可以在构造函数中执行Try / Catch,并从gotoSwitchCase中抛出。如果您在构造函数中捕获了抛出的异常,则它下面的任何内容都不会运行,因此您可以获得相同的效果。

当然......你总是可以随时随地使用return(包括构造函数)

答案 2 :(得分:1)

不,你不能返回父函数的执行。 但是如果你想提前退出,你的gotoSwitchCase(...)函数可以返回-1。然后你只需做一个if(gotoSwitchCase(...) == -1) return;