【问题标题】:I want to return something and execute some other method. Is there any way in JAVA?我想返回一些东西并执行一些其他方法。 JAVA有什么办法吗?
【发布时间】:2015-04-06 00:19:29
【问题描述】:

我是 Java 的初学者。 所以我有一个问题。

我有一个方法:

public boolean method1() {
    if (something) {
        returnVal = true;
    } else {
        returnVal = false;
        method2();
    }
    return returnVal;
}

我意识到在第二个条件为真之后,即使它会将returnVal设置为false,它也不会返回,因为它会进一步执行method2()。有没有办法重构我的代码,以便无论哪个条件为真,我的方法 1 返回 returnVal。

谢谢。

【问题讨论】:

  • user2262292,欢迎来到 StackOverflow!由于您是该网站的新手,您可能想阅读this

标签: java return void


【解决方案1】:

您的方法返回false。就在method2 完成之后。

没有办法强制在您返回后调用方法。 (即使有办法实现这一点,也没有任何意义。如果应该在method1 的调用者执行任何操作之前调用method2,这与在返回之前调用method2 相同。)

既然你问了,你可以在调用method2(有点)之前执行return语句,如下所示:

try {
    return false;
} finally {
    method2();
}

但这在语义上等同于您已经拥有的。

【讨论】:

    【解决方案2】:

    它不会返回,因为它会进一步执行method2()

    为什么?

    是的,它会在您执行method2() 之后返回,但这是个问题吗?只要method2() 完成,method1() 就会返回 false。

    如果您想返回然后执行该方法,那么您将需要在另一个线程中执行(这可能是不必要的)。

    【讨论】:

      【解决方案3】:

      method2() 运行后,您的方法将返回 false。

      如果您想使用method1() 的返回值来决定是否要运行method2(),您可以这样编写代码:

      if (!method1()) {
          method2();
      }
      

      【讨论】:

        【解决方案4】:

        也许你想要这样的东西?

        public boolean method1() {
          if (something) {
            return true;
          }
          return false;
          method2();//This will be dead code
        }

        还是这样?

        public boolean method1() {
         if (something) {
              return true;
        }
         else {
           try
             {
            return false; //first return false
               }
           finally
             {
            method2();//then call this
               }
        }
        }

        【讨论】:

        • 你的第一个 sn-p 甚至没有编译。
        【解决方案5】:

        如果method2重定向或关闭某些东西,那么false不会返回,method2是做什么的? 它应该完成 method2 然后返回到 method1 并返回 false ,除非 method2 对 returnVal 做了什么使其成为 true。

        另外,您可以只返回 true 或 false,而不是设置要返回的变量:

        public boolean method1() 
        {
           if (something) 
           {
              return true;
           }
           else 
           {
            method2();
            return false;
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-10-31
          • 2011-11-15
          • 1970-01-01
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多