Java isAssignableFrom Confusion

时间:2013-05-08 04:13:35

标签: java methods reflection

我正在使用Java的isAssignableFrom方法创建一种动态方法来调用程序中的事件。简而言之,我给了一个Class<?>Method对象的数组,我必须确定是否可以使用给定的参数调用该方法。

在大多数情况下,isAssignableFrom有效,但我遇到了一个特殊问题:自动装箱。例如,假设该方法采用intClass<?>[]包含Integer.class。实际上,Java将允许这样的调用发生,但int.class.isAssignableFrom(Integer.class)返回false。目前,我已经使用静态辅助方法解决了这个问题,如下所示:

public static boolean isAssignable(Class<?> a, Class<?> b) {
    if (a.isAssignableFrom(b))
        return true;
    Class<?> a1 = box(a);
    Class<?> b1 = box(b);
    if (a1.isAssignableFrom(b1))
        return true;
    return false;
}

其中box(Class<T>)是一个方法,它返回类的盒装形式(Integer.classint.class)或类本身(如果它不是原始的)。

我的问题是:有更好的方法吗?我正在使用的方法似乎很迂回,有点凌乱。有没有人有更清洁,更直接的方法?

0 个答案:

没有答案