我有这门课:
public abstract class AbstractIncomingCall {
/*
class properties
*/
public void changeStatus(/*some parameters*/){
//store parameters in class properties
isValid();
}
protected abstract boolean isValid();
}
Run Code Online (Sandbox Code Playgroud)
......这个课程扩展了:
public class IncomingCallImpl extends AbstractIncomingCall{
//I override the parent's method
public void changeStatus(/*same parameters as parent's method*/) {
super.changeStatus(/*same parameters as parent's method*/);
//do something interesting
}
protected boolean isValid() throws StatusChangeNotOccurredException {
//implement my validation algorithm
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是确保每当调用changeStatus(/*some parameters*/)时调用isValid()方法; 请注意,isValid()方法仅在具体类中实现,它还使用从父类继承的类属性.我有没有办法确保调用isValid()而不是调用super?我非常不喜欢我必须传递参数的事实,我认为我完全走错了方向并且有一种更清洁的方法来实现这一目标.我想在我的代码中保留的是抽象类中的"isValid()调用逻辑",因为每个调用都需要进行验证,我不能依赖于我将来记住这个:P
提前致谢 :]
kdg*_*ory 14
听起来你想要changeStatus()遵循模板方法模式.在这种模式中,您在抽象类中定义changeStatus()(如果您不信任人们正确扩展,则将其设置为final),并让它调用所需的方法:
public final void changeStatus()
{
doSomethingSubclassSpecific();
isValid()
}
protected abstract doSomethingSubclassSpecific();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |