当前位置:  开发笔记 > 编程语言 > 正文

确保方法被调用

如何解决《确保方法被调用》经验,为你挑选了1个好方法。

我有这门课:

public abstract class AbstractIncomingCall {

    /*
    class properties
    */

    public void changeStatus(/*some parameters*/){
        //store parameters in class properties
        isValid();
    }

    protected abstract boolean isValid();
}

......这个课程扩展了:

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
    }

我想要实现的是确保每当调用changeStatus(/*some parameters*/)时调用isValid()方法; 请注意,isValid()方法仅在具体类中实现,它还使用从父类继承的类属性.我有没有办法确保调用isValid()而不是调用super?我非常不喜欢我必须传递参数的事实,我认为我完全走错了方向并且有一种更清洁的方法来实现这一目标.我想在我的代码中保留的是抽象类中的"isValid()调用逻辑",因为每个调用都需要进行验证,我不能依赖于我将来记住这个:P

提前致谢 :]



1> kdgregory..:

听起来你想要changeStatus()遵循模板方法模式.在这种模式中,您在抽象类中定义changeStatus()(如果您不信任人们正确扩展,则将其设置为final),并让它调用所需的方法:

public final void changeStatus()
{
    doSomethingSubclassSpecific();
    isValid()
}


protected abstract doSomethingSubclassSpecific();

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有