我正在使用 Java 的isAssignableFrom
方法来创建一种在我的程序中调用事件的动态方法。简而言之,我得到了一个数组Class<?>
和一个Method
对象,我必须确定是否可以使用给定的参数调用该方法。
在大多数情况下,isAssignableFrom
工作,但我遇到了一个特殊的问题:自动装箱。例如,假设该方法采用 anint
和Class<?>[]
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.class
forint.class
等)或类本身(如果它不是原始的)的方法。
我的问题是:有没有更好的方法?我使用的方法似乎迂回,有些凌乱。有没有人有更清洁、更直接的方法?