【发布时间】:2013-07-23 15:06:12
【问题描述】:
在我的 GWT 客户端中,我试图确保传递给我的 Callback#onFailure() 实现的 Throwable 始终得到处理,因为这个庞大代码库中的许多实现对此没有任何作用。
为此,我定义了自己的RemoteServiceProxy#doCreateRequestCallback(),它在我自己的实现中包装了每个Callback。在那个#onFailure() 方法中,我想使用我自己的Throwable 版本,以便我可以跟踪它是否得到处理,例如。当Throwable#getMessage()被调用时,我将它传递给原来的Callback#onFailure()。
public class ThrowableProxy extends Throwable {
private Throwable delegate;
private boolean handled;
public ThrowableProxy(Throwable delegate) {
this.delegate = delegate;
this.handled = false;
}
// Overriding Throwable's methods to defer to the delegate
// package protected
boolean isHandled() {
return this.handled;
}
}
这一切看起来都很好,直到您点击 instanceof。现在,如果客户端代码想要检查异常的类型,例如。 throwable instanceof StatusCodeException,Throwable 是 ThrowableProxy 的一个实例,但我真正想要的是检查委托的类型。
instanceof 是如何工作的?我可以不做throwable.getDelegate() instanceof StatusCodeException之类的事情就让它检查委托吗?
【问题讨论】:
-
我认为您错过了问题的重点,我正在尝试找出是否有办法让
instanceof考虑代表,或解决此问题的其他方法。我考虑过覆盖#getClass(),但我找不到任何支持它的文档。 -
我现在很不理解。代理类也将实现一个接口;你可以制作一个通用的标记界面。除了委派一个也可以使用
setCause/getCause。 -
你不能做你想做的事。就这么简单。
-
那么,你想要这种效果吗?
StatusCodeException.class.isInstance(throwable)还是我完全误解了这一点?
标签: java gwt instanceof