我遇到的问题就像在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()函数打印,然后重定向到我想要的链接。
任何帮助都将不胜感激。
答案 0 :(得分:1)
重新设计您的类层次结构,不要覆盖/隐式调用具体行为 - 当super.method()
覆盖/扩展/调用行为时,它是有关继承层次结构问题的常见来源 - 用文字说话对于Checkstyle,类的方法应该是final(不允许覆盖),abstract或empty(允许覆盖)。
编辑避免此行为的一种常见模式是模板方法模式(http://en.wikipedia.org/wiki/Template_method_pattern)。