缺少Class.isInstance()的GWT解决方法

我正在尝试在GWT中编写一个作业调度系统来维护一组exception( Class[] exceptions ),这可以通过重试作业来解决。 为此,如果调度程序捕获exception,我需要查看此exception是否与数组中的某个类匹配。 所以,我希望有这样的function:

 boolean offerRetry(Exception exception) { for (Class e: exceptions) if (e.isInstance(exception)) return true; return false; } 

不幸的是, Class.isInstance(...)在GWT中不可用。

有一个很好的解决方案吗? 我目前最好的猜测是这样的:

 public static boolean isInstance(Class clazz, Object o) { if ((clazz==null) || (o==null)) return false; if (clazz.isInterface()) throw new UnsupportedOperationException(); Class oClazz = o.getClass(); while (oClazz!=null) { if (oClazz.equals(clazz)) return true; oClazz = oClazz.getSuperclass(); } return false; } 

不幸的是,这种方法不支持对接口进行测试,我也不知道如何修复它,因为Class.getInterfaces()也不可用。 但是,除了接口之外,这种方法在所有其他情况下至少与Java的Class.isInstance一样吗? 具体来说,如果我查看GWT的Class.java源代码 , getSuperclass()方法包含对isClassMetadataEnabled()的检查,它可能返回false(但我不知道在哪些情况下),因为它包含一个注释“This可以用编译器代替“。

或者有更好的方法完全做到这一点?

我使用以下代码:

  public static  boolean isInstanceOf(Class type, Object object) { try { T objectAsType = (T) object; } catch (ClassCastException exception) { return false; } return true; } 

也许这样的事情会有所帮助:

 boolean offerRetry(Exception exception) { try{ throw exception; } catch (SpecException se) { return true; } catch (SpecException1 se1) { return true; ... } catch (Exception e) { return false; } } 

这取决于你如何构造exception数组。 如果java 7的东西正常工作,那么你可以将所有exception放在一个catch中:

 boolean offerRetry(Exception exception) { try{ throw exception; } catch (SpecException | SpecException1 | ... se) { return true; } catch (Exception e) { return false; } }