3

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

在大多数情况下,isAssignableFrom工作,但我遇到了一个特殊的问题:自动装箱。例如,假设该方法采用 anintClass<?>[]contains 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;
}

wherebox(Class<T>)是返回类的盒装形式(Integer.classforint.class等)或类本身(如果它不是原始的)的方法。

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

4

0 回答 0