首页 > 解决方案 > 对抽象方法执行通用初始化步骤

问题描述

我目前正在重构一组可以简化如下的类:

public abstract class A {
    public abstract Output doStuff(Input in);
}

public class B extends A {
    public Output doStuff(Input in) {
        // dostuff and return an output
    }
}
 

现在,我想添加一个A其值派生自的字段Input in,最好不要更改子类中的任何内容(大约有 20 个类,如B

基本上,我想找到一种方法来init在每次调用时调用该方法(见下文)doStuff(),而不必在类中实现该方法A,也不必在扩展 A 的类中进行更改。

你知道任何优雅的方法来做到这一点吗?

public abstract class A {
    private Object property;

    public abstract Output doStuff(Input in);

    private init(Input in){
      property=in.getProperty();   
    }
}

public class B extends A {
    public Output doStuff(Input in) {
        // dostuff and return an output
    }
}

标签: javaoopinheritance

解决方案


您可以简单地编写一个方法,在A其中调用init()方法和doStuff()方法。这样init(),每个子类都会自动调用该方法。

public abstract class A {
    private Object property;

    public Output doStuffWithInit(Input in) {
         this.init(in);
         return this.doStuff(in);
    }

    public abstract Output doStuff(Input in);

    private init(Input in){
      property=in.getProperty();   
    } 
}

必须将消费类更改为调用doStuffWithInit(),以确保init()每次都调用它。


推荐阅读