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

标签 java class gwt instanceof

我正在尝试在 GWT 中编写一个作业调度系统,该系统维护一个异常数组 ( Class<? extends Exception>[] exceptions ),这些异常可以通过重试作业来解决。为此,如果调度程序捕获到异常,我需要查看此异常是否与数组中的类之一匹配。所以,我想要一个这样的功能:

boolean offerRetry(Exception exception) {
    for (Class<? extends Exception> 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;
}

不幸的是,这种方法不支持针对接口(interface)进行测试,我也不知道如何解决这个问题 Class.getInterfaces()也不可用。但是这种方法至少会像 Java 的 Class.isInstance 一样工作吗?在所有其他情况下,不包括接口(interface)?具体来说,如果我看 GWT's source for Class.java , getSuperclass()方法包含对 isClassMetadataEnabled() 的检查,它可能会返回 false(但我不知道在哪种情况下),因为它包含一条注释“This body may be replaced by the compiler”。

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

最佳答案

我使用以下代码:

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

关于java - 缺少 Class.isInstance() 的 GWT 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23188913/

相关文章:

java - 将底部导航 Activity 转换为 Fragment

Java Object[] 和缓存分级

java - 如何在Spring MVC中实现DI?

ios - 来自多个循环的对象数组

java - BorderLayout容器大小问题

java - 在 GWT Web 应用程序的服务器端获取刷新计数

java - 如何使用 thead 和 tbody 创建 FlexTable

c - 成员方法有 C 宏吗?

c++ - 为什么不能通过名称打印成员函数的地址?

java - 在 root 中映射 servlet