如何确定方法是否被覆盖?

时间:2018-02-16 12:28:09

标签: java

考虑以下情况:

我正在开发一个框架,允许用户子类化框架提供的特定抽象类,这将允许他们将自己的功能插入到应用程序的流程中。

例如这样的一个类:

public class MyAbstractClass {
    protected String step1(String input) {
        // default implementation
    }

    public final void process(MyObject objct) {
        // some steps
        String someData = step1(object.getInput());
        // some more steps
    }
}

现在,在更新版本的框架中,我想更改step1方法以使用某个对象(可以将其转换为当前step1方法的参数)作为参数。但是,我不想破坏已经扩展此类的用户的代码。

我目前正计划这样做:

public class MyAbstractClass {

    private boolean isOldStep1Overriden = true;

    protected String step1(MyObject input) {
        String oldValue = step1(input.getInput());
        if (isOldStep1Overriden) {
            // the method has been overriden - some logic here to handle this (assume this logic is known)
        } else {
            // the method has not been overriden - ignore the old value and carry out the new default processing
        }
    }

    @Deprecated
    protected String step1(String input) {
        // default implementation
        isOldStep1Overriden = false;
    }

    public final void process(MyObject objct) {
        // some steps
        String someData = step1(object);
        // some more steps
    }
}

有没有其他方法可以实现这样的用例?

以下选项也处于暂停状态:

  • 为新实现创建一个新的抽象类 - 这将阻止现有用户在不修改其代码的情况下获取新功能。
  • 使用反射 - 如果可能,我不愿意

编辑:一些更相关的背景信息:

有问题的框架实际上是一个部署到共享位置的应用程序,该框架的用户(开发人员)提交要在其中安装的扩展。因此,应用程序本身可以升级,而扩展的开发人员不会对其代码进行任何更改。举一个类似系统的例子,考虑firefox及其插件 - 两者都由不同的团队开发,而firefox可以在没有插件开发人员知识的情况下进行更新。

0 个答案:

没有答案