在我的 GWT 客户端中,我试图确保始终处理Throwable
传递给我的Callback#onFailure()
实现,因为这个庞大的代码库中的许多实现对此没有做任何事情。
为此,我定义了我自己的,它在我自己的实现RemoteServiceProxy#doCreateRequestCallback()
中包装了每一个。Callback
在那种#onFailure()
方法中,我想使用我自己的 a 版本,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
吗?