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