通过多种深度​​的方法推回

时间:2014-05-28 20:36:04

标签: java

这可能会在StackOverflow的深处迷失,主要是一个学术问题,但我很好奇,似乎无法找到正确的方法来解决这个问题。

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

由于我有多个方法需要这个 函数 ,我将它移动到它自己的静态函数needs()。然后,我将方法调用插入到需要要满足的每个方法的顶部。

问题:有没有办法让某些方法强制调用方法返回?因此,在我的示例中,needs()会导致methodA()返回,而methodA()除了首先调用needs()之外,还需要执行任何特殊操作。

同样,这主要是学术性的..我知道有很简单的方法可以避免这种情况并绕过它,但我想知道你是否能够做到这一点。请不要回复“为什么你甚至试图这样做?只需做一个if语句并让needs()返回boolean。”我知道。不过,这不是我的问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

  • 将方法解压缩到单独的接口并实现一个包装器,如果满足条件,它将执行检查并将方法委托给实际的实现类。

    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();
            }
        }
    }
  • 使用动态代理或方面执行上述操作。

答案 1 :(得分:1)

没有办法直接控制父方法的行为(我不介意任何反射黑客攻击),因为该方法只知道自身的一切(如果你没有得到堆栈跟踪),但你可能会抛出一个Exception并添加一个空的catch子句。