java - 对抽象方法执行通用初始化步骤
问题描述
我目前正在重构一组可以简化如下的类:
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
}
}
解决方案
您可以简单地编写一个方法,在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()
每次都调用它。
推荐阅读
- python - 嵌套循环显示来自模型 django 的所有数据
- c# - 访问添加到数组中的对象参数
- vba - 是否可以使用 Word VBA 从 Word 2013 中的附加模板中检索页边距定义?
- loopbackjs - 如何停止 loopbackjs 运行我想要端口 3000 回来?
- javascript - 在 PHP 中访问 JavaScript json 数组
- java - 数组列表的重复条目
- c# - Net Core React WebApi Auth 个人
- ruby-on-rails - 为什么生成器在 Shopify Gem 中不起作用?
- python - 如何从列表中获取最近的时间?
- firebase - 当我运行 ionic 3 程序时,我得到 Property 'push' is missing in type 'FirebaseObjectObservable and Expected 2 arguments, but got 1