在子类方法之前调用父类方法

时间:2014-02-19 08:10:27

标签: java oop gwt

我遇到的问题就像在Java中出现阴影一样。我有以下代码:

public abstract class AsyncCallback<T> implements com.google.gwt.user.client.rpc.AsyncCallback<T>{
  @Override
  public void onFailure(Throwable caught){
     try{
        throw caught;
     }catch(){

     }//various catch blocks
     .
     .
     catch(Throwable e){
         onError();
     }
  }

  public void onError() {
        //print something
  }

  abstract public void retry();
}

现在我用以下语法调用rpc调用:

rpc.callAnyMethod(param, new AsyncCallback<SomeClass>(){
            @Override
            public void onSuccess(SomeClass class) {
                setSomeClass(class);
            }

            @Override
            public void onFailure(Throwable caught) {
                try {
                    throw caught;
                } catch (ClientException e) {
                    if (e.getMessage().equals(sometoken)) {
                        //redirect to a link                    
                    }
                } catch (Throwable e) {
                    retry();
                }
            }

            @Override
            public void retry() {
                //call the method again.
            }
});

但问题是父类XYZ中的方法首先从onError()函数打印,然后重定向到我想要的链接。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

重新设计您的类层次结构,不要覆盖/隐式调用具体行为 - 当super.method()覆盖/扩展/调用行为时,它是有关继承层次结构问题的常见来源 - 用文字说话对于Checkstyle,类的方法应该是final(不允许覆盖),abstract或empty(允许覆盖)。

编辑避免此行为的一种常见模式是模板方法模式(http://en.wikipedia.org/wiki/Template_method_pattern)。