Java 通过多种深度的方法推送返回

Java 通过多种深度的方法推送返回,java,Java,这可能会迷失在StackOverflow的深处,这主要是一个学术问题,但我很好奇,似乎找不到正确的方式来表达这一点 我的情况是这样的:我有一些方法依赖于一组特定的条件为真。事实证明,我有几种方法依赖于这些条件为真。如果这些条件为真,则不会执行任何操作,并且需要条件集的methodA()将继续执行。否则,它将给出一个特定的错误,这取决于哪个条件为假,以及。。。我们来看看它还能做什么 因为我有多个方法需要这个功能,所以我将它移动到它自己的静态函数needs()。然后,我在每个需要满足这些条件的方法的

这可能会迷失在StackOverflow的深处,这主要是一个学术问题,但我很好奇,似乎找不到正确的方式来表达这一点

我的情况是这样的:我有一些方法依赖于一组特定的条件为真。事实证明,我有几种方法依赖于这些条件为真。如果这些条件为真,则不会执行任何操作,并且需要条件集的
methodA()
将继续执行。否则,它将给出一个特定的错误,这取决于哪个条件为假,以及。。。我们来看看它还能做什么

因为我有多个方法需要这个功能,所以我将它移动到它自己的静态函数
needs()
。然后,我在每个需要满足这些条件的方法的顶部插入方法调用

问题:有没有办法让某个方法强制调用方法返回?因此,在我的示例中,
needs()
将导致
methodA()
返回,而不需要执行任何特殊操作,只需首先调用
needs()

同样,这主要是学术性的。。我知道有很多简单的方法可以避免这种情况,但我想知道你是否能做到。请不要回答“你为什么要这样做?只要做一个if语句,让
needs()
返回一个
boolean
”我知道。但这不是我的问题


谢谢

无法直接控制父方法的行为(我不介意这里的任何反射攻击),因为该方法只知道自己的一切(如果没有堆栈跟踪),但是您可以抛出一个
异常
并添加一个空的
catch
子句。

无法直接控制父方法的行为(我不介意这里的任何反射黑客),因为该方法只知道它自己的一切(如果您没有得到堆栈跟踪),但是您可以抛出一个
异常
并添加一个空的
catch
子句。

无法直接控制父方法的行为(我不介意这里的任何反射黑客),因为该方法只知道它自己的一切(如果您没有得到堆栈跟踪),但是您可以抛出一个
异常
并添加一个空的
catch
子句。

无法直接控制父方法的行为(我不介意这里的任何反射黑客),因为该方法只知道它自己的一切(如果您没有得到堆栈跟踪),但是您可以抛出一个
异常
并添加一个空的
catch
子句。

您不能直接这样做,但您可以:

  • 将方法提取到单独的接口,并实现一个包装器,该包装器将执行检查,并在满足条件时将方法委托给实际的实现类
  • 使用动态代理或方面来执行上述操作

    • 您不能直接这样做,但您可以:

      • 将方法提取到单独的接口,并实现一个包装器,该包装器将执行检查,并在满足条件时将方法委托给实际的实现类
      • 使用动态代理或方面来执行上述操作

        • 您不能直接这样做,但您可以:

          • 将方法提取到单独的接口,并实现一个包装器,该包装器将执行检查,并在满足条件时将方法委托给实际的实现类
          • 使用动态代理或方面来执行上述操作

            • 您不能直接这样做,但您可以:

              • 将方法提取到单独的接口,并实现一个包装器,该包装器将执行检查,并在满足条件时将方法委托给实际的实现类
              • 使用动态代理或方面来执行上述操作

              是的,这也是我能想到的最好的解决方案。我可以让所有的方法更进一步,甚至可以有效地将该方法传播回它的原始调用方。如果Java允许使用C:pYeah中的宏,这会容易得多,这也是我能想到的最好的解决方案。我可以让所有的方法更进一步,甚至可以有效地将该方法传播回它的原始调用方。如果Java允许使用C:pYeah中的宏,这会容易得多,这也是我能想到的最好的解决方案。我可以让所有的方法更进一步,甚至可以有效地将该方法传播回它的原始调用方。如果Java允许使用C:pYeah中的宏,这会容易得多,这也是我能想到的最好的解决方案。我可以让所有的方法更进一步,甚至,这将有效地将该方法传播回其原始调用方。如果Java允许C:p+1中的宏来回答这个问题,这将容易得多,尽管解决方案比它值得的复杂:)谢谢+谢谢你回答这个问题,尽管这个问题的答案比它的价值还要复杂:)谢谢+谢谢你回答这个问题,尽管这个问题的答案比它的价值还要复杂:)谢谢+谢谢你回答这个问题,尽管这个问题的答案比它的价值还要复杂:)谢谢!
              
                  interface Methods {
                      void methodA();
                      void methodB();
                      void methodC();
                  }
              
                  class MethodsImpl implements Methods {
                     ...
                  }
              
                  class ConditionalMethodsWrapper implements Methods {
                      private final Methods delegate;
              
                      ConditionalMethodsWrapper(Methods delegate) {
                          this.delegate = delegate;
                      } 
              
                      boolean condition() {
                        ...
                      }
              
                      void methodA() {
                          if (condition()) {
                              delegate.methodA();
                          }
                      }
              
                      void methodB() {
                          if (condition()) {
                              delegate.methodB();
                          }
                      }
              
                      void methodC() {
                          if (condition()) {
                              delegate.methodC();
                          }
                      }
                  }