是否有一种通用的反射方法来确定java方法是否返回一组对象,如数组,列表,集合,集合和其他可迭代的子接口? 背后的故事是我需要检查第三方方法的返回类型并说两件事:
例如,如果方法的返回类型是Vector<A>
,A[]
,Set<A>
等,我希望我的代码返回A
。
我是反思/仿制药的新手,不想重新发明轮子,也不确定我的方法是否正确。这是我到目前为止所做的:
private boolean isMultiple(Class clazz) {
return clazz.isArray() || Iterable.class.isAssignableFrom(clazz);
}
private Class getReturnComponentType(Method m) {
Class clazz = m.getReturnType();
if(!isMultiple(clazz)) return clazz; // Not a collection
// Collection
if(clazz.isArray()) {
// How do I get Array's component type?
// return null;
} else {
// How do I get Iterable component type?
// return null;
}
}
请帮忙。
答案 0 :(得分:2)
获取Iterable组件类型:除了getReturnType()
之外,还使用getGenericReturnType()
来获取泛型类型。然后将其与Type
子接口进行比较:GenericArrayType,ParameterizedType。
要获取阵列组件类型,请使用clazz.getComponentType()
。